お盆でこともなし

晴。
音楽を聴く。■モーツァルトクラリネット五重奏曲K.581(デイヴィッド・シフリン、ノースウェスト室内楽団、参照)。シフリンのクラリネットはなかなかいい。

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~』を読んでいる。第一章読了。おもしろい。Ruby を使ってインタプリタ言語を作ったり、中間言語方式(JavaJVM は有名だし、Ruby も 1.9 からこの方式である)で「チューリング完全」な言語を実装したりと、かなりすごい。しかし読んでもらえばわかるが、どれもとてもシンプルに実装されていて、初心者 Rubyist でも充分に読めてしまうので、勉強になること間違いない。
 第一章まででも三つの言語が実装されており、最初の「HQ9+」はジョーク言語、次の「Brainf*ck」は八つの命令しかないシンプルな言語だが(割りと有名な言語らしい)、既にチューリング完全である。三つ目の「Whitespace」は、半角スペースとタブ文字と改行からなる、決して「表示できない」言語であるが、なかなか本格的で、しかも中間言語コンパイルしてから処理系(VM)で実行するものである。こんなのが、比較的簡単に Ruby で実装できてしまう驚き。しかも、Ruby の基本的な文法のみで書かれており、メタプログラミングの類など一切使っていない。というか、これなら『たのしいRuby 第4版』を読んだくらいで理解できるのではなかろうか。いや、大したものだなあ。続きを読むのが楽しみ。
 本書を読んでいて思うのは、プログラミングというのは実装の細部のテクニックよりも、データ構造とアルゴリズムが根本的に重要だということだ。それが上手く考えられていれば、やさしい技術で(読みやすいコードで)実装ができるかも知れない。必ずしもアクロバティックなプログラミング技法をたくさん知るばかりが、能ではないということだ。

Ruby 遊び。