Горячая замена кода с шикарным clojure и устойчивостью к сбоям

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

Я использую шикарные clojure и emacs с плагином lein-swank.

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

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

(Мне нужно было написать 0.5, а не .5.)

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

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

Спасибо!


person thedayturns    schedule 05.05.2012    source источник


Ответы (2)


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

person Matthias Benkard    schedule 06.05.2012

Лично я рекомендую C-M-x вместо C-c C-c. Однако я не думаю, что у любого из них должна быть проблема, с которой вы столкнулись, поэтому переключение может не решить ее.

person amalloy    schedule 05.05.2012
comment
Действительно? Что происходит, когда вы случайно C-M-x какой-то код, который обращается к свойству nil или что-то в этом роде? Означает ли это, что моя установка как-то испорчена? - person thedayturns; 06.05.2012
comment
*пожимает плечами* Slime открывает окно с трассировкой стека. Я просматриваю его, если есть что-то интересное, а затем нажимаю Q, чтобы закрыть его и вернуться к работе. - person amalloy; 07.05.2012