言語ゲーム

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

Twitter: @propella

3imp 写経の日々その2(ふつうの人むけ)

リクエストがあったので 3imp の教義についてご説明します。3imp というのは 1987 年に Kent Dybvig さんが博士論文として書いた物で、Scheme というプログラミング言語の作り方について説明してあります。プログラミング言語というのは、コンピュータに何か仕事を頼む時に使う言葉で、人間の言葉に日本語や英語など色々種類があるようにコンピュータ言語にも色々種類があります。Scheme はそういった言語の一つです。

コンピュータに関係する論文は色々ありますが、この 3imp は言語の実装について書かれた物です。言語の実装というとややこしいので、たとえで説明します。例えばあなたが作りたいものが麻婆豆腐だとします。麻婆豆腐を作る為にはレシピが必要です。このレシピをプログラムだと思ってください。ただレシピを読むと誰でも料理が作れる訳じゃなくて、たとえば大さじとはどれくらいで、中火とはどういう意味かと色々約束事があります。この約束事が言語です。

  • 麻婆豆腐 = コンピュータでやりたい仕事
  • レシピ = プログラム
  • レシピの読み方 = プログラム言語

言語が違うとレシピがあっても料理を作れません。例えばあなたが江戸時代に書かれた料理の本を読んでもさっぱり再現出来ないでしょう。同じように、プログラミング言語が違うとプログラムも全然変わってくるのです。

さて現代の私たちが料理をする時、レシピの書き方は大体決まっています。しかし、これが理想なのかというとなかなか難しい問題があります。現代の日本のレシピの書き方を使って、別の時代、例えば江戸時代の料理や、別の文化を持つ国、例えばインドの料理を記録出来るでしょうか?日本のレシピの書き方というのは、日本で手に入る素材や器具を前提に決められています。という事はこの狭い前提を元にした現代の日本のレシピの書き方を使ってしまうと、どうしてもそこに収まりきらない素材や調理方法、または作法など、風土特有の要素を無視してしまう事になります。

つまり、レシピの書き方が表現出来る料理の性質を決めていると言えます。

さまざまなプログラミング言語が存在する理由も同じです。レシピの書き方が出来る料理を決めてしまうように、言語がコンピュータで出来る事を決めてしまうので、なかなか一つの理想のプログラミング言語を全員が使うというわけには行かないのです。

プログラミングとレシピの最大の違いは、プログラミング言語プログラミング言語自体で書かれる事です。レシピの例をしつこく使うと、レシピの書き方を説明する他のレシピがあるという事です。これは本質的かつややこしい考え方なので、機会があればまたご説明したいと思います。

3imp 自体の教義というよりその背景の話になってしまいましたが、今日はこの辺で。