Код "горячей замены" с замкнутым замыканием и отказоустойчивостью
Я возился с разработкой игры в 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. Однако я не думаю, что у кого-то должна быть проблема, с которой вы столкнулись, поэтому переключение может не решить ее.