Estendere l'eccellente risposta di Bert Freudenberg.
1) È questa (cioè la capacità dell'oggetto di serializzare il proprio codice sorgente) una comprensione accurata?
No. Come ha sottolineato Bert, un'immagine di Smalltalk è semplicemente un'istantanea di memoria. La singola fonte di verità di entrambi gli oggetti Smalltalk e Smalltalk è la loro rappresentazione in memoria. Questa è un'enorme differenza rispetto ad altre lingue, dove i programmi sono rappresentati come file di testo.
2) Qual è la sfida nell'aggiungere questa capacità ai linguaggi moderni (non chiaro, ovviamente)?
Tecnicamente, il bootstrap di un'applicazione da un'istantanea di memoria dovrebbe essere possibile per la maggior parte delle lingue. Se non sbaglio ci sono soluzioni che utilizzano questo approccio per accelerare i tempi di avvio per le applicazioni Java. Dovresti essere d'accordo su una rappresentazione di memoria canonica e avresti bisogno di fare attenzione a reinizializzare le risorse native al riavvio del programma. Ad esempio, in Smalltalk, vengono riaperti i file aperti e la connessione di rete. E inoltre, c'è un hook di avvio per correggere l'endianità dei numeri.
3) La "serializzazione" è la parola giusta? Qual è il gergo corretto?
Hibernation è il termine.
Si noti che questo funziona bene perché smalltalk viene eseguito nella propria VM, quindi organizza il proprio stato di memoria e lo gestisce autonomamente. Se provassi a farlo con un programma C non creato per questo, probabilmente andrebbe bene la maggior parte del tempo, ma le casse d'angolo potrebbero insinuarsi. – Marcin
Ciò che aiuta l'istantanea è che lo stato di esecuzione (ad es. Processi, frame di stack) è parte della memoria normale dell'oggetto. Ciò rende particolarmente semplice l'istantanea e la ripresa del codice in esecuzione. –