ブーツのストラップ

今日、コードレビューで不思議なコードを目撃しました。

Boot boot;
boot.boot();

これは Boot クラスの インスタンスを 変数boot に束縛し、Boot::boot() をコールするという処理・・・・・・なのですが、なんだか原始宗教のお祭り囃子のようで。少なくとも とてもブートしたがっている という事だけは伝わってきます。情熱的なコードですね。

名前がいけないと思います。なので 辞書を引きつつ代替え案を練りました。辞書を引いてみて初めて知ったのですが、Boot ってブーツのことですか。・・・でもなんでブーツなのでしょう。

boot はどうやら BootLoader、BootLoader は Bootstrap Loader から来ている様です。ああ、なんだかどんどん間延びするばかりで、ぜんぜんクリアになっていかないですね。

Bootstrap(ブートストラップ) は、ブーツの踵の部分についているつまみベロのことで、これを引っ張って靴を履く為のアレです。で、向こうの慣用句で「Bootstrap を引いて自分で自分を持ち上げる」= 不可能 というのがあります。

ここでコンピュータのお話です。コンピュータの電源を入れた直後、メモリ上にはオペレーティングシステム(OS)は存在しません。一方ディスクからソフトウェアをロードするにはOSが必要です。OSをメモリにロードするためには、OSがメモリに存在していなければならないというパラドックスが生まれます。いやんな感じですね。

これが Bootstrap の慣用句を連想させるので、システムを起動させるための最初の一つまみの小さなプログラムを Bootstrap Loader と名付けたそうな。転じて boot にシステムを起動させるという意味が含まれるようになりました。なるほど〜。でもせっかくのしゃれっ気の効いた言葉だったのに、私たち日本人の大半は単なる外来語扱いしてたのですね。「はいはい、ブートブート」って感じで。失礼な民族です。


さて、先ほどの呪文のようなコードを書いた方は、ジョークというのもあるのでしょうけれど、きっと BootLoader という語は起動ディスクのMBR(マスターブートレコード)にかかれたちっちゃなプログラムを指す固有語っぽいので、使いたくないということもあるのだと思います。BootLoader は特定の処理を連想するからだめなら Boot も駄目じゃんということになると思います。片一方、処理のほうが boot で OK なら 別に立ち上げる人を素直に BootLoader と呼んでしまっても良いと思います。屁理屈っぽいですが。

さて、この故事を聞いて私が最初に思ったのは、「鶏が先か卵が先か」みたいだわ、でした。マスターブートレコードに入りそうなのは、どちらかというと鶏よりも卵のほうです。狭いですし。なので、やっぱり卵が先だったんでしょう。きっと。

BootLoader と言う語を使うのに、やっぱりしっくりこないようなら、人生にはエスプリが必要です。なので私、明日こんなのを提案してみたいと思います。「自分で自分のブーツのヒモを引っ張る」なんて聞いたことありませんし。

Egg anEgg;
anEgg.hatch();  // 卵を孵化(hatch)させる

・・・・・・いまいちですね。

何やっているのか余計わからない気がするのと、Egg::hatch のセンダーはニワトリじゃないのかしらって気がして、元のパラドックス的にも落ち着かないのと両方で。

追記 2007-06-25

クラス名を B、メソッド名を t にすれば、全てがうまくいくことを発見。

B o;o.t();

これで 4回の「boot」が1回だけになりました。そして速攻で却下されました。 orz