Non ho mai usato Smalltalk, ma ne ho letto molto e mi ha sempre intrigato. Ho visto le demo interessanti su cui è in esecuzione un programma e semplicemente modificando i metodi delle classi utilizzate dagli oggetti del programma altera il comportamento del programma in esecuzione. È roba chiaramente potente e capisco come possa funzionare così. Quello che non riesco a definire con certezza è cosa succede alle istanze esistenti di una classe quando si desidera aggiungere, rimuovere o rinominare le variabili di istanza di quella classe.Ridefinizione delle variabili di istanza di una classe Smalltalk
Non riesco a immaginare come sia possibile modificare le variabili di istanza che tutte le classi utilizzano in un programma in esecuzione e si aspettano ancora che le istanze esistenti di quella classe funzionino correttamente in seguito. Forse sto aggiungendo una nuova variabile di istanza che ho bisogno di inizializzare e dove i metodi precedentemente esistenti sono stati modificati per dipendere da questa variabile. Non potrei finire con un orribile malfunzionamento di qualsiasi codice in esecuzione che ha istanze live di quella classe? O cosa succede se il significato di una variabile di istanza è cambiato e ora mi aspetto che un tipo diverso di oggetto sia memorizzato lì rispetto a prima? Esiste una sorta di meccanismo di "upgrade"? O è la solita pratica semplicemente lasciare che le istanze precedenti si blocchino e brucino? O è semplicemente un caso di "non facciamo quel genere di cose sui programmi in esecuzione e aspettiamo che sopravvivano?"
L'unico approccio ragionevolmente pulito che riesco a pensare è che quando si modificano le definizioni delle variabili di istanza si crea effettivamente una classe completamente nuova e le vecchie istanze, prima della modifica, continuano a funzionare correttamente con la definizione della vecchia classe (che ora è inaccessibile per nome poiché il nome è stato ridefinito nella nuova definizione di classe). Forse questa è la spiegazione più logica - ma dal momento che non ho trovato nulla che spieghi direttamente questo processo, ho pensato di chiedere qui e vedere che tipo di informazioni divertenti mi hanno preso. :)
Impressionante! Grazie per questo link. Non so perché il mio Googlefu non fosse abbastanza forte da trovare questa risposta. Ho provato per un bel po 'prima di pubblicare questa domanda! Dovevo mancare una parola chiave importante. : P – Sean