『Rubyで作る奇妙なプログラミング言語』
原 悠(著)
2008年
毎日コミュニケーションズ
☆☆☆☆☆
オブジェクト指向スクリプト言語Rubyを用いて、既存の「Esoteric Language=奇妙なプログラミング言語」の処理系を作りつつ、ついには(実用性はない、ちょっとフザけた)独自プログラミング言語まで作ってしまおう、という本。Rubyの初級者が入門書の次に読む本としてちょうど良いと思う。想定読者としてUNIX/Linuxユーザー(と言うことは、プロITエンジニアの卵?)を念頭に置いているようだが、Windowsユーザーでも充分対応できると思う。Rubyのバージョンは1.9系(1.8系も可)。
全2章構成。第1章(115ページ程度)では、Rubyの復習も兼ねつつ、3つのEsoteric Languageの処理系(「HQ9+」インタプリタ、「Brainf*sk」インタプリタとRubyプログラムへのトランスレータ、「Whitespace」の中間言語へのコンパイラとヴァーチャルマシン(インタプリタ))を作る。第2章(70ページ程度)では、2つのオリジナルEsoteric Languageの処理系を作ってしまう(いずれも中間言語方式)。トータル220ページ程度の薄い本だが、記述は簡潔にして丁寧、内容もよく練られていると思う。付録として「Esoteric Language傑作選」(25ページ程度)も。
真面目ぶって見せているフザけた本であり、フザけているようでスコブル真面目な本。優秀な人というのはこういうフザけ方をするのか…、と妙に感心した(著者は京大出身。やはり京大出身で『ゲームプログラマになる前に覚えておきたい技術』(秀和システム 2008年)や『プログラムはこうして作られる』(秀和システム 2013年)の平山尚氏と叙述スタイルが似ているのは偶然?)。著者の所属がRubyの生みの親のまつもとゆきひろ氏と同じなので、きっとまつもと氏と同世代の筋金入りのベテランRubyistなのだろうと思っていたが、意外と若い人のようだ。まつもと氏は「プログラミング言語おたく」として有名だが、著者も同じ穴のムジナ!?
Rubyは入口の敷居は低いが、(LispやSmalltalkの影響が強い、「UNIX/Linuxユーザーの常識」を前提としているところがある、等々)いろいろクセのある言語で、実は素人が独学で上達していくのは比較的難しい言語ではないかと思う。Rubyには他の(もっとカッチリとした)プログラミング言語の常識からすると考えられないようなことが可能だったりするので、それを知っただけで「Rubyで『何か』を作れそう!?」とワクワクするのだが、「Rubyでしか作れない何か」があるワケではないし、いざ「何か」を作ってみようとすると何も思いつかなかったりもする。また、入門書は読み終えたが、Rubyの多彩な機能をどう組み合わせて実際のプログラムを作っていけばいいのか見当もつかない、という初級者も多いだろう。
そんな人にオススメなのが、実践的なRubyプログラミング入門でもある本書。実際のところ、Rubyはテキスト処理が得意だから、言語処理に適しているのだろう。Rubyが言語内DSL(Domain Specific Language)の開発に向いている、ということがよくわかる。冗談みたいな本だが、言語処理系の基本的な仕組みというものも見えてくるし、コンピュータ・サイエンスの一部分も感じ取れるような、そんな本。もちろん、実用的なプログラミング言語と処理系を開発したい、という読者にはあまり役に立たない(失礼!)本なのだが…、良書だと思う(笑)。
本書を読み進めていくうちに次第に感じ始めたのは、「どんなプログラムであれプログラミングというものには、毎回毎回『新しいプログラミング言語』を設計・実装しているようなところがある」ということ(出典を思い出せないのだが、『達人プログラマー』(アンドリュー・ハント&デビッド・トーマス(著) 村上雅章(訳) 2000年 ピアソンエデュケーション)(の著者)として知られるDavid Thomas氏も同じようなことを言っていたような…)。どんなプログラムも「入力→処理→出力」を行っているワケだが、「入力に対する処理を行う」ためにはまず「入力データを解釈する機能」が必要で、それはまさに「(狭義の)インタプリタを作る」ことに他ならない(解釈した結果に対して「動作」を出力するのが(広義の)インタプリタ、「別の言語のコード」を出力するのがコンパイラ(ないしトランスレータ))。考えてみると、個別のプログラムは「汎用性のない、使い捨てのプログラミング言語」を作っているのと同じことなのだ。そのプログラムに汎用性を持たせようと追求していくと…、それは「プログラミング言語」にどんどん近づいていくのである! そういうワケで、本書を通してプログラミング言語の設計・実装の様子を眺めていると、その背後に「プログラミングの本質」がオボロゲに見えてくる。ノンプログラマとしてエクセルVBAのプログラムを書いているときだって、「自分は今、ミニ言語を作っているんだ」と考えれば…、何かプログラミングのコツ(にして秘訣)をつかめるんじゃないか…、とそんな気分。
ところで、毎日コミュニケーションズってある種の人にとってはドンピシャなニッチなプログラミング本をよく出すのだが、すぐに絶版にしてしまうという困ったところがある(例えば、やはりRuby初級者脱却に最適な『
恋するプログラム』(秋山智俊(著) 2005年)、関数型言語なら『入門Haskell』(向井淳(著) 2006年)や『入門OCaml』(OCaml-Nagoya(著) 2007年)、他にも(絶版にはなっていないが)『30日でできる! OS自作入門』(川合秀実(著) 2006年)、『CPUの創りかた』(渡波郁(著) 2003年)、等々)。本書も刊行時には本屋でよく見かけたように記憶しているが、そのワリに早くから絶版になっていた。「Rubyの初級→中級のステップアップに最適な本なのに…」と残念に思っていたが、2014年に第2版が刊行されていたようだ(内容は同じだが、Rubyのバージョン2.0系、2.1系にも対応しているようだ)。アマゾンではKindle版しか扱っていないが、紙の本も(PODで)購入できるようだ(『恋するプログラム』も電子書籍として復刊された)。
CD-ROM等は付属しないが、著者による
サポートページにソースコード、練習問題の解答例、正誤表が掲載されている。
本文220ページ程度(「付録」を含む)。

0