人は死んだらどこへ行くの?
というお題をC++臭い疑似言語で考えてみる。
struct Spirit; struct Body;
どこまで精神かってのはあるだろうけど、肉体以外全てということで。
struct Spirit{ gender, age, name, location; }; struct Body: RealObject{ Spirit spirit; moveto(); };
で、ここでdelete bodyすると、location含むspiritは消滅します。おしまい。
これC#なんかでやると、BodyがGCに回収されてもSpiritが他から参照されていれば回収されないのよね。参照されなくなったらSpiritも消えるってのは、魂は知人の中で生き続けるとか、忘れられたら実質存在しないって話に通ずるところが。バイトでウィザードに存在を消す術があったけど、あれはその人に関連する他人の記憶を消し去る*1。灼眼のシャナではトーチにされると徐々に存在の力が弱まるが、これは徐々に気にされなくなり、忘れられていく*2。
ところで「他人の中で生き続ける」となるともはや空想上の存在になるわけだけど、考えて見ればしばらく会ってない人、会ったことない人、極端に言えば他人のイメージ全てある意味空想上の存在のような。その証拠に同じ人を指していても人それぞれイメージが違う。というところから考えた別解。
union SpiritRef{ const Spirit *real; //目の前にいるときだけアクセス可能 Spirit localcopy; }
会っていないときはlocalcopyの方に間接的に得た情報を蓄積して、localcopyの情報を参照する。実際にあったときだけrealが――もっともパブリックメンバなんて知れてるだろうが――参照可能になる。なんだかオフラインフォルダとかレプリケーションの同期みたいだ。この考え方だと、realの参照先が存在しているかではなくて、参照可能かどうかに意味がある。realが消滅していたら永遠に同期できないだけの話だ。そしてrealが元からぬるぽである空想上の人物同様に、全ては想像によって更新される。と、なれば。ref(.localcopy).locationに天国を代入するのも地獄を代入するのも、おのおのの勝手というわけだ。
で、たどりついた結論は「オリジナルは消滅するから所在地なんてないが、他人が持つイメージの所在地はご自由に」。
肉体の死を知ったとき、spiritへの参照を破棄することもできる。つまり、忘れること。でも忘れたくない。だから破棄しない。
locationに実際の地名が入ってるとややこしいし、nullにすると消えてしまいそうだし・・・天国/地獄でも入れておきますか。