言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

自己記述言語

実はゆいちゃんに、

「自己記述言語」とは僕らの世の中ではどんな場面でいきてくるのか、なかなかちんぷんかんぷんなので、ぜひ語ってください。楽しみにしてます!!!

とコメントをもらったので念のため確認してみようと「自己記述言語」で検索したら、この日記くらいしか引っかからなくてびっくり!みんな自己記述言語って言わないの?もしかしてオレ用語だったか???ちなみに他には「セルフホスティング」だとか、「ブートストラップ」だとか言うみたいです。

さて、自己記述言語とは何かというと、似た言葉として循環定義という言葉があります。例えば小学二年生のあなたはお父さんの本棚にあった『太閤記』を読んでいて、知らない単語に出会ったとします。

  • 「『まぐわい』って書いてあるけど、分からないから辞書で調べよう。。。」
  • 「なになに?『男女の性交』?いやらしい雰囲気だけど、性交の意味が分からないよー」
  • 「えー、性交とは、『性的まじわり』である。と。まじわりってなんだろう。。。」
  • 「『まじわり』とは、つきあい、交際、性交、???」

と、いつまでたっても肝心の意味に辿りつきません。これは青少年を有害な情報から守ろうとした大人が意地悪でやってるわけでは無くて、言葉を言葉で説明するには他の方法が無いからです。これを循環定義と言います。循環定義を理解するためには、あらかじめある程度の語彙を知らないといけません。この、知識が足りなくて循環定義が使えない状況を「ブートストラップ以前」の世界とお考えください。

さて、それからお向かいのお姉さんが、「えー!そんなんも知らんのー?じつは(ゴニョゴニョ...)」と教えてくれたとします。あなたがもしも十分に成熟してそれを理解出来たならば、あなたの知的世界はその後一挙に広がる事でしょう。知らない単語が出て来ても心配いりません。お姉さんに一々聞かなくても知っている単語を手がかりに意味を調べたり、前後の文脈で理解出来るようになります。妄想たくましく新しい単語を発明し、友人と共有する事さえ出来るでしょう。これが「ブートストラップ後」の世界です。

プログラミング言語の開発も同じようなプロセスを辿ります。まだプログラミング言語が若く、十分な機能の無い段階では、他のプログラミング言語、向かいのお姉さんのような人の助けが必要です。しかし一旦十分な機能が揃うと、もはや外部からの助け無しに自分自身で成長して行けるようになります。実際の人生ではいつまでも誰かの助けが必要な物ですが、プログラミング言語の世界では、「ここから先は助けが要らない」という一線がきっちり決まっていて、それを超えたら自己記述言語という事になります。

ここで一つ面白い問題があります。どれだけ早く、小さな段階でこの自己記述言語は実現出来るのでしょうか?

この問題を考えるために比喩をさらに続けると、例えば明日地球が滅亡すると突然分かったとします。地球を脱出するためのロケットの能力が限られているなら、子孫を残す為に何を載せるべきでしょうか?もちろん男女の赤ちゃん二人を載せるだけではどうしようもありません。もしも、ロケットに十分な知識を備え付け、赤ちゃんが必要な時に必要な事を学び、赤ちゃん自身がロケットを改良しつつ新しい世代を育てて行くプロセスを確立出来れば、まだチャンスはあるかもしれません。そのような最低限の知識などあり得るでしょうか?

実は生命自体がそのように設計されているそうです。生命の設計図である DNA は、ただの設計図なのでそれだけでは生命を再生産出来ません。適切な時期に適切な環境に置かれて、初めて必要なタンパク質を作り出します。面白いのは DNA の周りにある環境というのは生命自身によって作られた物だという点です。DNA の周りにある細胞質や細胞膜から始まって、大気中に存在する酸素や地中海中の多くの物質が、生命由来の物だそうです。つまり生命というのは環境中で DNA を複製し、その DNA が環境を作り出すという相互作用のプロセスです。その基盤がシンプルな塩基配列にあるというのは驚くべき事です。

出来るだけ小さな自己記述言語を作る作業というのは、プログラムの世界の中で DNA に相当するような必要最低限でかつ表現力豊かなメカニズムを作り出す事です。もしそのような仕組みがあれば、コンピュータはより強靭で柔軟になるでしょう。強靭である為にはシステムの基本要素は小さく単純であるべきです。そして柔軟である為には環境に適応して行ける自己記述である必要があるのです。

比喩だらけで胡散臭いですが、小さな自己記述言語を作る理由は、このように強靭で柔軟なプログラムを作るためです。