言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

状態樹

状態樹についてもう少し、よく考えたら上の可変オブジェクトでは過去の値と送信オブジェクト、メッセージが必要なわけだから、これは実行コンテキストそのものである。と言う事で、可変オブジェクトとは、現在の値と実行コンテキストを持つと簡単に言う事が出来る。現在のオブジェクトがプロセスを渡り歩いて行くイメージとは異なり、実行という巨大な樹にオブジェクトの状態がぶら下がっている感じだ。

で、なぜ樹なのか説明書くの忘れていたが、過去を変更する事は出来なくても、別の枝を追加する事は出来るのがポイント。プログラムの作成やデバッグはそうして行う。メッセージが不変と書いたのは何もメッセージを表すシンボルが不変という訳ではなく、メッセージとは、オブジェクトが属するクラスのある瞬間のメソッドだという事だ、だから当然プログラムを変更するとメソッドは変わるのだが、それは既存の枝を変更せずに、新しい枝を作る。ここはもっと精密に考える必要がありそうだな。メソッド変更の事実が、どのように他のオブジェクトに伝わると言うのだ?

オブジェクト指向言語で重要な機能に、ガベージコレクションというのがあるが、これがまた厄介。メモリは有限なので、このガベージコレクションの時間版が、状態樹を実現するための中心技術となるだろう。例えば OS のユーザは OS の開発過程なんて普通は知る必要が無いわけで、多分これは無くても良いだろうなという情報だけを選択して削除しなくてはならない。過去が勝手に切れる事は無いのでここは割とヒューリスティックな汚い作業になるのかも知れない。人生と同じく、過去を忘れる事は難しい。