計算機の中で動いているプログラムは、自分が連続した広大なメモリ空間を占有していると思い込んでいます。実際の物理メモリはずっと狭く、細切れで、他のプログラムと奪い合っている。その落差を埋めているのが仮想記憶という仕組みで、要するに、走っているプログラムに対して一貫した作り物を見せ続ける装置です。この作り物は間違いではありません。むしろ、これがなければ現代のソフトウェアはほとんど書けない。
各プログラムが扱うアドレスは、そのまま物理的な場所を示すとは限りません。必要な対応づけを仕組みの側が引き受けるため、書き手は他のプログラムがどこへ置かれたかを毎回計算せずに済む。しかも同じ仮想上の番地が、別のプログラムでは別の物理領域へ対応し得る。
技術用語では、こういう層のことを「透過的」と言います。上の層が下の層を意識せずに済む状態を、透明だ、透けて見えない、と表現する。ここに語感の反転があって、しばらく面白がってしまいました。透過性が高いほど、上の層はより深く騙されている。よくできた幻想ほど、それが幻想であることを利用者に気づかせない。品質の指標が、そのまま欺きの深さの指標になっている。
たとえば保存ボタンを押す利用者は、記録媒体のどの位置へ何を書き、故障へどう備えるかを通常は意識しません。一つの操作として見える背後で、複数の層が仕事を分担している。透明であるとは内部が単純なことではなく、複雑さの責任が別の場所へ移されたことです。
もっとも、この作り物は永久には保たない。抽象は必ずどこかで漏れる、という言い方が計算機の世界にはあります。ネットワーク越しのファイルは、手元のファイルとまったく同じ手続きで開けるように作られています。ところが回線が切れた瞬間、その同一性は崩れる。速度も漏れます。同じ命令が、条件によって百倍遅くなる。つまり作り物の存在は、それが壊れる瞬間にしか観測できない。うまく動いているあいだ、その層はどこにも姿を現しません。
失敗の種類も漏れます。手元の媒体なら読めない理由が機器や権限に限られていても、遠隔の資源には通信の遅延、相手側の停止、経路の断絶が加わる。利用者が再試行や取消しを求められた瞬間、隠されていた距離と時間が画面へ現れます。
ここで一度立ち止まります。この構造を「嘘」の側に置いてしまうのは短絡ではないか。仮想記憶が見せている像は事実と違いますが、それによって初めて書けるプログラムがあり、考えられる設計がある。認識を制限する装置であると同時に、認識を可能にする装置でもある。虚偽と有用性は排他ではない——この一点を落とすと、話が単なる暴露に堕ちます。作り物を批判するより、どこまで保つのかを測るほうが実りがあります。
抽象が約束する範囲を狭く定義すれば、下の実装は交換できます。記録先が変わっても「名前を指定して読み書きできる」という契約が保たれるなら、上の処理は書き直さずに済む。問題になるのは作り物の存在より、保証していない性質まで保証されたように見せることです。
物語にも同じ測り方が使えます。読者が受け取っているのは常に何らかの抽象で、作中の世界がそのまま渡されることはありません。人物の性格、地理、時間の流れ——どれも簡略化された層です。層が漏れるのは矛盾が出たときで、そこで初めて読者は、自分が何を信じていたかに気づく。だとすれば、作り込みの質は細部の量ではなく、漏れずに保つ範囲の広さで測るべきものになります。百話目で崩れる設定と、崩れない設定の差は、密度ではなく設計にあります。
設計時には、読者へ保証する不変条件を少数に絞れます。この人物は約束を破らない、この扉は内側からしか開かない、移動には必ず一日かかる。細部が増えても、その条件が保たれれば世界の像は続きます。