3 ms·
I have always viewed the Emacs/Slime/CL development environment as being a more frictionless approach than the compile/link/execute approach of most other langu
by kaveh808 1mo ago
I have always viewed the Emacs/Slime/CL development environment as being a more frictionless approach than the compile/link/execute approach of most other languages, but I get the impression there are people who evangelize "image-based coding" without having tried it out themselves.
The idea of not maintaining properly documented sources would terrify me.
As people point out, if you are not careful and execute arbitrary code in the REPL, your source and image can drift out of sync. When I was working on [1], I would go days without relaunching my image, but all the development was done by evaluating code in Emacs buffers and seeing the results right away. Occasionally, things got convoluted enough that I relaunched the process as a sanity check.
For me, the real benefit of iteratively modifying a live image lies in the sense of flow it engenders. I have not felt that sense in languages other than CL. I sometimes explain the feeling by saying than CL is the only language that I don't feel is fighting me.
[1] https://github.com/kaveh808/kons-9 https://github.com/kaveh808/kons-9
- sroerick 1mo agoI asked a similar question above, but can you talk more about the ergonomics of keeping the source and the image in sync? Is this generally a manual process in CL?
- kaveh808 1mo agoBasically, I launch my Slime/SBCL and do my development by editing and evaluating code in my Emacs buffers. This updates the running image and I can check the results interactively. I regularly save my buffers as one does. This process can continue for days. There are times when I need to relaunch my Slime/SBCL and start fresh. These are usually cases where I do some refactor that eliminates some functions, or when a bug causes crashes and I feel it would be cleaner to start fresh. All pretty common sense. I never save my Lisp image and relaunch it. Maybe I would if I was delivering binaries, but my project is open source.