いものやま。

雑多な知識の寄せ集め

『RubyでつくるRuby ゼロから学びなおすプログラミング言語入門』を読んでみた。

前から気になってた『RubyでつくるRuby』をこの前の技術書展5で購入して読んだので、その感想とか。

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

結論から言うと、「残念な本だったなぁ」というのが正直な感想。

自分が読む前に期待していたのは、わざわざRubyを対象の言語として選んできているくらいなのだから、「Rubyっぽさ」にちゃんと触れ、その「Rubyっぽさ」を活かして構文解析や抽象構文木の評価を実装していく、という内容。

ただ、読んでみたら、

となっていて、拍子抜け。

抽象構文木の評価も、クラスを使ってダックタイピング的に「うひょ〜、同じメソッド呼び出しでも、ポリモーフィズムでちゃんとあるべき処理が実行されるぜ! これぞオブジェクト指向! case文? そんなのいらん!」ってなってればカッコよかったんだけど、配列を使ったプリミティブな構造になってて、case文で条件分岐して、といった具合で、「えぇぇ・・・」と。
そんなのはHaskellにでもやらせとけと。

まぁ、そうなっているのは理由があって、この本で実現するRubyインタプリタは極々小さなサブセットになっていて、四則演算、変数、分岐、関数、配列、ハッシュくらいしかサポートしていないから。
ここでいう配列やハッシュも、メソッド呼び出しとかは一切サポートされてないので、ホントにプリミティブな機能しか用意されてない。
なので、RubyRubyっぽいところがゴッソリ落とされている感じ。
でも、それってRubyでやる必要あるの・・・?

そんな内容なので、この本はRubyの入門書としては使い物にならないので注意。
当然、構文解析も筆者の用意したgemの関数をポンと叩くだけなので、インタプリタ作成の入門書とかにも当然ならない。
RubyRubyをつくる、というネタ自体は非常に面白いと思うのだけど、ホントそういう趣味本として読むならともかく、実用性はまったくなし。
まぁ、そう言う本、自分は嫌いではないけど(^^;

にしても、せめて構文解析の部分はちゃんと書いて欲しかったなぁ・・・
もちろん、そこが一番難しいところで、書くのも大変なのは分かるんだけど、上記の通り、正直入門書にはまったくならない本なんだから、せめて趣味本としてちゃんと知的好奇心を満たしてくれている内容にして欲しかった。

ぶっちゃけた話、「Rubyプログラムを実行できるRubyプログラム」を書くだけなら、以下でいいわけだから:

eval File.read $*.shift

多分これが一番短いと思います。(23文字)

ちなみに、ちゃんとブートストラップもするし、(当たり前だけど)Rubyの機能もフルサポートしてるw

「いやいや、そんなん構文解析も評価も全部親のRubyインタプリタに丸投げしてるだけやん」って言われそうだけど、本書だって組み込み関数や配列やハッシュの実装は親のRubyインタプリタに丸投げだし(これ自体はまぁ仕方ない)、構文解析も筆者の作ったgemに丸投げでブラックボックスなわけだから、丸投げの度合いが違うだけとも言える。
例えば、それこそ筆者の作ったgemで本書の最後のプログラムを一つの関数として提供すれば、関数呼び出し1つポンとやってオシマイ、となるわけだし。

で、上記のワンライナーRubyインタプリタはおかしい、インタプリタの説明に全然なってない、と思うのなら、やっぱり構文解析の部分をマルッと省略してしまっている本書も、同様の批判がされるべきなんじゃないかな、と思う。
どうせこんな趣味本を買う初心者なんかいないんだから(偏見)、マニアックな方向に寄せて、ちゃんと書いて欲しかったなぁ。

今日はここまで!

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門