Код "горячей замены" с замкнутым замыканием и отказоустойчивостью

Я возился с разработкой игры в clojure, и одна вещь, которой я был действительно взволнован, это горячая замена кода.

Я использовал Swank Clojure и Emacs с lein-swank плагин.

Моя главная проблема была проблема опечаток. Скажем, я обновляю функцию, делаю небольшую ошибку и затем нажимаю Ctrl-C Ctrl-C, чтобы отправить ее в REPL:

(if (> (rand) .5) (println "yay") (println "boo"))

(Я должен был написать 0.5не .5.)

В этом случае вся программа просто рухнет и сгорит, и мне нужно будет перезапустить все это. Горячая замена это здорово, но если я не могу сделать даже небольшую ошибку, какой смысл?

Так что же здесь за рабочий процесс? Я что-то пропустил? Или есть способ сделать замыкание Суонкэ более устойчивым к этим маленьким ошибкам? (Я полагаю, что лучше всего просто вернуться в предыдущее рабочее состояние, хотя это может быть немного сложно.)

Спасибо!

2 ответа

Решение

Программа не должна "аварийно завершать работу" - она ​​должна вызывать исключение и бросать вас в отладчик, который вы можете закрыть, нажав Q (sldb-quit). После закрытия отладчика программа должна продолжить работу в обычном режиме. Если этого не происходит, возможно, ваша конфигурация SLIME как-то нарушена.

Лично я рекомендую CMx более Cc Cc. Однако я не думаю, что у кого-то должна быть проблема, с которой вы столкнулись, поэтому переключение может не решить ее.

Другие вопросы по тегам