私は Smalltalk を使ったことはありませんが、Smalltalk についてはよく読んでおり、常に興味をそそられてきました。プログラムが実行されていて、プログラムのオブジェクトが使用しているクラスのメソッドを変更するだけで、実行中のプログラムの動作が変わるクールなデモを見てきました。それは明らかに強力なものであり、それがどのように機能するかを理解しています. クラスのインスタンス変数を追加、削除、または名前変更するときに、そのクラスの既存のインスタンスがどうなるかは、はっきりとはわかりません。
実行中のプログラムですべてのクラスが使用しているインスタンス変数を変更し、そのクラスの既存のインスタンスが後で正しく機能することを期待する方法を想像できません。おそらく、初期化する必要があり、この変数に依存するように以前の既存のメソッドが変更された新しいインスタンス変数を追加しています。そのクラスのライブインスタンスを持つ実行中のコードの恐ろしい誤動作に終わることはありませんか? または、インスタンス変数の意味が変更され、以前とは異なる種類のオブジェクトがそこに格納されることを期待している場合はどうなるでしょうか? ある種の「アップグレード」メカニズムはありますか? それとも、以前のインスタンスをクラッシュさせて燃やすだけにするのが通常のやり方ですか? それとも、これは単に「私たちがしない」というケースですか
私が考えることができる唯一の合理的にクリーンなアプローチは、インスタンス変数の定義を変更すると、おそらく実際にはまったく新しいクラスが作成され、変更前の古いインスタンスは古いクラス定義で問題なく機能し続けるということです(現在は名前が新しいクラス定義に再定義されたため、名前でアクセスできません)。おそらくそれが最も論理的な説明ですが、このプロセスを直接説明するものは何も見つからなかったので、ここで質問して、どのような楽しい情報が得られたかを確認することにしました. :)