Ask HN: How does Common Lisp implement hot-reloading?
A typical approach used in other languages or debuggers is either to use a dispatch table or to have some NOP bytes at the beginning of every function that could be rewritten into a jmp to the new function definition. In the first case the code incurs a performance penalty for every invocation. In the latter there is no performance hit however the call stack must be kept completely unchanged. This doesn't seem to match the experience one achieves with SBCL on Linux where calls don't seem to be slowed down and one can recompile just some forms in the middle of the stack. It seems that in some way the CL compiler could update also the call stack. The only other language that reaches the same level of interactivity is Smalltalk for which however I know only about of single-threaded implementations. How is CL different from other languages with respect to this? Where can I find more technical details about how hot-reloading is implemented in CL?
Cheers