@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

RubyでつくるRuby 読書感想文

どんな本?

f:id:ledsun:20170908114109p:plain

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門(紙書籍)www.lambdanote.com

言語処理系の実装を体験するための本。 言語処理系の実装はパーサの実装が面倒臭くて、大抵の人はそこで力尽きます。 そこで、パーサは著者の方が用意しておいて、構文木の解釈だけを読者が実装するスタイルです。

ところで著者の方は

の著者で

の訳者で

regional.rubykaigi.org

NESファミコン)のエミュレータruby で書いた、Rubyハッカーの方です。 さらに

『Ruby で学ぶ Ruby』非公式あとがき - まめめも

個人的に盛り上がってきたので、そこから 1 週間で全 8 回(当時)の原稿をすべて書き上げました

130ページの本の第1稿を1週間で書いたとか、ちょっと意味わかんないです・・・(汗

どんな縁?

咳マニアなので、Tochigi RubyKaigi 07 に参加しました。 そこで「RubyでつくるRuby」読書会があったので、読み始めました。

サインももらえました!やったね!!

何をした?

一通り読んだ後に、インタプリタソースコードの最終形を写経して動かしてみました。 120行に満たないRubyソースコードを打ち込んだだけで、インタプリタが動いた!すごい!(そういう趣旨の本です)

淡々と条件分岐を打ち込んでいくのは、正直、面倒臭い作業でした。 パーサ部分を実装していないのに、この面倒臭さ!言語処理系の実装は大変ですね。

既存のRubyソースコードをいくつか試したら、動かないものもありました。 たとえばArray#starts_withを使っているソースコードです。 組み込みライブラリが入っていないので当然ですね。 まともに言語処理系を作るには、パーサ加えて、組み込みライブラリも必要です。 ますます大変ですね。

最終形を写経するだけでは、どういうことを考えながら判断しながら言語処理系を実装していくのかは、あまり理解できませんでした。 もうちょっとゆっくり、手順を守って実装してみたほうが良いかもしれません。

次に何をしてみる?

JavaScriptで同じようなことをしてみようと考えると、JavaScript界ではASTの定義やパーサライブラリは整っています。

efcl.info

Esprimaで作ったASTを使ってJavaScript(のサブセットの)インタプリタを実装すれば、言語処理系実装への理解がもうちょっと進みそうです。