継続

 エミュレータのクイックセーブは継続を保存してる。Windowsの休止状態なんかもそうだ。全状態を保存すれば継続も保存される。

 サウンドノベルのセーブも継続を保存してるわけだけど、全状態を保存してるわけじゃなく、クリアフラグといったものは全ての継続で使いまわされる。

 環境が仮想化されていなくても、全環境を保存すれば継続も保存できる。クリアフラグといったものを保存しないためには一部だけの保存が必要になる。保存処理を一々書くのではないまっとうな方法をとろうとすれば、仮想化された環境が必要になり、その仮想化された環境の全てを保存することになる。仮想化された環境は必然的にインタープリタになり実行速度が遅くなる。JITにネイティブにすれば速度は早くなるがネイティブを保存しようとすると全環境の保存が必要になる。OSを細かく分割出来ればネイティブでもOSの分割された部分だけを保存すれば済む。Virtual PCなんかを使えばそれも出来る。

 OSのさらに外側、クリアフラグのような各OS間で使いまわされるものが存在するということをアプリケーションは知ることが出来ていない。Windows7はOS自体が仮想化されるといった噂が聞こえるので、それが成されればOSに外側が存在することをアプリも知ることが出来るようになるだろう。

 その外側がグローバルになるのか、ヒープになるのか。ヒープはグローバルを任意の数持つことが出来る。それがオブジェクト指向の一番優位なところだ。各グローバルをどの仮想化されたOSと関連付けるか。グローバルの関連付けられ方はオブジェクト指向だと基本的に木になる。木は子供になるにつれ膨れ上がっていく。それは分かりにくい。しかしグローバルをn個に分割してn個のOSに対して個々に割り当てるとnの二乗になり実装不可能になる。

 無数のグローバルを互いに関係のないn個の木にまとめ、それらの木からいくつかをOSと関連付ける。Mixinというやつだ。これもよく考えればnの二乗なんで不可能だ。

 各OSは一個のグローバルをもつ。単一継承の考え方。これが確かに一番優れている。