> If the image has been saved with this anomaly a couple of decades ago then it's really fun trying to sort it out.
Nobody uses CL images that way, mostly because there aren't any CL implementations that produce images that are portable, and most implementations kill themselves to make the image (that's the easiest way to deal with memory allocation, multithreading, and open file descriptors). I've read about a couple of people trying but they don't get very far.
> Fixing a live system can also be hazardous if you are replacing a function that may be on the stack at the moment, or if you are in any sort of multithreaded/process environment. Bugs become much harder to reason around and fix in those cases because there can be race conditions about which functions actually get called while you're applying your fix.
This is a well known problem in Lisp-land, not because you're always hot-patching things in production, but because that's the way you develop code. There are a lot of things you can do to make atomic code loading possible, and different CL implementations have various levels of race condition proofing in the compiler and runtime systems.
> TL;DR You can, but probably shouldn't.
Most people who make this argument make it disingenuously or out of ignorance. I've heard it from people who don't seem to have any problems using ipython or pry or a SQL console to debug in production.
Nobody uses CL images that way, mostly because there aren't any CL implementations that produce images that are portable, and most implementations kill themselves to make the image (that's the easiest way to deal with memory allocation, multithreading, and open file descriptors). I've read about a couple of people trying but they don't get very far.
> Fixing a live system can also be hazardous if you are replacing a function that may be on the stack at the moment, or if you are in any sort of multithreaded/process environment. Bugs become much harder to reason around and fix in those cases because there can be race conditions about which functions actually get called while you're applying your fix.
This is a well known problem in Lisp-land, not because you're always hot-patching things in production, but because that's the way you develop code. There are a lot of things you can do to make atomic code loading possible, and different CL implementations have various levels of race condition proofing in the compiler and runtime systems.
> TL;DR You can, but probably shouldn't.
Most people who make this argument make it disingenuously or out of ignorance. I've heard it from people who don't seem to have any problems using ipython or pry or a SQL console to debug in production.