先祖返りの町作り ~無限の寿命と新文明~
第11話 イベントハンドラ
これまでに習ったいくつかの魔法式を詳細に解析してみた結果、最初に感じた違和感は確信に変わっていた。
魔法式は、間違いなくプログラミング言語に良く似ている。これに気づいた時、私は当初、アセンブリ言語と呼ばれるものを想定して比較研究していた。
魔法は自然現象を直接操作するような挙動をする。であるならば、コンピューターで使われているプログラミング言語に置き換えて考えてみると、ハードウェアを直接操作できる、一番低レベルな言語であるアセンブリ言語が、最も近いのではないかと考えたのだ。
しかし、解析を進めてみると、アセンブリ言語よりも言語体系がすっきりとまとめられており、もっと高級なプログラミング言語に近いという事が判明した。
そのまま研究を進めた結果、構造化言語と呼ばれる種類のものが最も近いという結論に至った。
構造化言語の中で一番広く知られており、また、利用もされているのはC言語と呼ばれるものだろう。
だが、少なくとも、私が習得している魔法式の中には、構造体やポインタといった、C言語に特徴的な機能が見当たらなかった。
これらの事から、私が記憶している範囲のプログラミング言語の中では、Pascalというものが一番近いと考えている。
実際、判明した魔法文の構文の中には、ファンクションやプロシージャと呼ばれる、関連する機能をひとまとめにするような命令も存在している。
もちろん、if文のような条件分岐、while文のようなループ命令、算術演算子、変数宣言文等も揃っている。
このような特性であるため、元々プログラマーだった私にとっては、内容を深く理解する事がとても簡単だ。
ただ、不思議なのは、魔法を使うためには処理の流れを理解する事が必須で、であるならば、魔法式を改造する事は簡単そうに思えるのに、里の誰もそれをしようとはしない。
祭司長に詰め寄ってしつこく何度もなぜなのかと問いただしてみると、どうやら、アルク族の伝統的な「美意識」が邪魔をしているらしく、保守的なせいで昔の慣習を変えたがらないと理解した。
(これって、もっと綺麗なソースコードにできるはずなのですけれど……)
そのように考えながら、何気なく地面に書き込んだ魔法式を眺めていた。
初級の水を作り出す魔法で、whileループの条件式を一か所だけ変更する事で、魔法の持続時間を変化させるものだ。魔法式を変更したがらないアルク族が、例外的に一部変更する魔法式だ。
目に留まったのは、緊急停止文と呼ばれる、魔力を使いすぎた時のためにwhileループを強制的に抜け出す命令だ。
おそらくは安全装置として機能しているのだろう。右手の人差し指と親指の先をくっつけると、break文のような命令が発動する。
これを見た時にひらめいた。
whileループの終了の条件式を絶対に成立しないものにして、無限ループを作る。魔力を使い続けるようなところを無限ループさせてしまうと、そのまま完全な魔力切れを起こして死んでしまうが、それ以外のところであれば問題ない。
そして、右手の人差し指と親指をくっつける等、特定の行動をした時に、用意しておいた変数にその行動を示す値を代入してからbreak文を発動させ、無限ループを強制的に抜け出す。
後はセットされている変数の値を参照し、別の関数として宣言しておいた魔法式を呼び出すように作る。
つまり、プログラミングのテクニックで言えば、イベントハンドラと呼ばれる機能を疑似的に実装する。
これが実現できれば、ごく小さい動作で各種の魔法が瞬時に起動できるようになる。
この魔法式のいい所は、メインとなる部分を囲うようにもう一つの無限ループを作れば、いちいち魔法のかけなおしをしなくても、ずっと待機状態を維持できる。
不具合があった場合の停止命令も、同じようにbreak文を使えば用意できる。
ただ、実際に動かしてみてからデバッグするという作業が少し難しいため、この停止命令だけは何があっても確実に動作するように、事前にソースコードの評価を徹底して行っておく必要があるだろう。
この里のものであれば、幼い子供を除いて、誰でも二種類ぐらいの魔法式を同時に組み立てる事ができる。
祭司長は四種類できるし、私も三種類までならできるようになった。よって、常に待機状態になる魔法式が一つあっても問題はないだろう。
せっかくなので、他の魔法式も自分好みに最適化して関数化していく。とっさに必要になるのは、身を守るための魔法だろう。とりあえず、強風と土壁の魔法を登録しておく。
理想を言えば、回復魔法や解毒魔法みたいなものを登録しておきたい。もし、これができるのであれば、即死でもしない限りは復活できそうな気がする。
だが、それらの魔法はそもそも存在していないらしい。これは以前に、祭司長に質問して確認していた。
考えてみれば、この世界の魔法式はプログラミング言語に似ているため、かなり詳細な処理の流れを記述する必要がある。
そして、回復魔法と簡単に言っているが、損傷した人体を回復させる場合、その手順はとても複雑なものになる。
もし仮に、魔法式で表現する事が可能であったとしても、そのプログラムコードは、恐ろしく長大なものになる事が簡単に予想できてしまう。
解毒魔法についても同様の事が言える。
一口に解毒と言っても、その中和方法等は、毒の種類によって千差万別だ。腎臓機能等の人体の免疫能力を強化するとしても、やはり、非常に複雑な手順を経る必要があるだろう。
それに、そもそもの話として、何をもって毒とするのかの判断もかなり難しい。
毒であっても適量であれば薬になるものもある。
逆に、薬であっても過剰であれば毒になるものも多い。
これらの事を考えてみれば、魔法式でこれらの便利機能を実現するのは、ほぼ不可能だと断じる事ができるだろう。
そんな事をぼんやりと考えながら、地面にガリガリと新しい魔法の魔法式を書き上げていく。
(やっぱり、新しいプログラムを自作するのって、かなり楽しいですね!)
ここまでやって、ある事実に思い至り、私は愕然としてしまった。
何度もしつこく、祭司長には注意されていた。
「魔法式を安易にいじらぬように」
そのため、無駄に複雑で効率も悪い、気持ちの悪いプログラムコードを、我慢して暗記していた。
ちなみに、このようなコードはスパゲッティコードと呼ばれていて、プログラマーからは忌み嫌われている。なんでも、無駄に絡まったスパゲッティから名付けられたのだとか。
だが、よくよく考えてみれば、魔法式を声に出して読み上げるのは暗記するまでだ。
一度覚えてしまったこれらのスパゲッティは、まるっと破棄してしまい、最適化した魔法式で覚えなおしてから、頭の中でこっそりと組み上げて発動してしまえばいい。誰にも分かりゃしない。
(とりあえず、このイベントハンドラの魔法の実験が成功しましたら、かたっぱしから最適化していきましょう)
ちなみに、この新しい魔法の発動トリガーは、私のオリジナル魔法である事を隠しようがないため、開き直って、そのまま『イベントハンドラ』にした。
とは言っても、魔法文字の発音はかなり特殊なため、通常の口語のような言葉は記述できない。
そこで、なんとなくそれっぽく聞こえるかな? という音を無理やり当てはめている。
そうやって、魔法の改良や鍛錬を繰り返しながら充実した日々を過ごし、三年が経過する頃になると、里に伝わる全ての魔法を習得していた。