What gives Smalltalk the ability to do image persistence, and why can't languages like Ruby/Python serialize themselves?

interpreted-language, persistence, serialization, smalltalk

Solution

It's much simpler than "serializing". A Smalltalk image is simply a snapshot of the object memory. It takes the whole RAM contents (after garbage collecting) and dumps it into a file. On startup, it loads that snapshot from disk into RAM and continues processing where it left off. There are some hooks to perform special actions on snapshot and when resuming, but basically this is how it works.

(added: see Lukas Renggli's comment below for a crucial design choice that makes it so simple compared to other environments)

Problem

In smalltalk, you're able to save the state of the world into an image file. I assume this has to do with Smalltalk's ability to "serialize" itself -- that is, objects can produce their own source code. 1) Is this an accurate understanding? 2) What is the challenge in adding this ability to modern languages (non-lisp, obviously)? 3) Is "serialization" the right word? What's the correct jargon?

Original source