『Rubyのしくみ -Ruby Under a Microscope』を読んだ所感と次に勉強するもの

冬休みの課題図書として『Rubyのしくみ』を読みました。もうとっくの昔に冬休み終わってるんですけど。大まかな理由は単純に「使っているプログラミング言語の中身を知りたい」という欲求からでした。

この本を読んで得た知見を以下の通りざっくり紹介したいと思います。

Rubyコードが実行される流れがざっくり分かった

普段書いている Ruby のコードがどのように機械が分かるように変換されていくか(実際は YARV 命令列まで)がざっくり分かるようになりました。字句解析→構文解析→コンパイル→ YARV 命令列まで変換し、そこからは YARV が実際のコードの実行を担います。

Rubyのリポジトリのファイルの役割が少し分かった

全体像を把握するには笹田さんが書いた (2) MRI source code structure の方が詳しいと思いますが、parse.y(parse.c)が何をやっているのか、vm_core.h が何をやっているのか、各クラスと同じ名前のついた *.c ファイルが何をやっているのか、そんなあたりのことがちょっと分かるようになりました。-

他のタイプの Ruby の位置づけが分かった

普段多くの Rubyist が使っているのはおそらく Ruby on Rails であって、CRuby だと思います。これは MRI(Matz Ruby Implementation)をベースに YARV という仮想マシンを導入し、その上に C 言語で書かれているものです。しかし他にも JRuby や Rubinius など C 言語以外で書かれているものもあります。JRuby は JVM という歴史の長く知見の詰まった仮想マシンの恩恵を受けられること、Rubinius は Ruby で内部実装を読めること(本来は SmallTalk や Lisp のようにその言語自身で実装する設計思想を踏襲しようとしたのが理由らしい)などのメリットがあるそうです。

ガベージコレクションとは何なのかざっくり分かった

CPU が確保したメモリをそのままにしておかず、参照されなくなったと判断できたら解放して他で使えるようにすることです。色んなタイプのガベージコレクションがあります。やっていることと意味はおそらく理解しやすいと思うんですが、長らく研究対象になるほど奥が深いそうです。

内部の細かいところは分からないけど、何をやっているのかざっくり把握できるようになる、それを元に更に詳細を深める足がかりにできる、そんな本だなと思いました。とても勉強になりました。

次に勉強すること

謎が増えました。コンパイルって何?構文解析ってどうやってるの?ガベージコレクションってどういう流れなの?C 言語勉強しなきゃあ…。CPU のしくみそもそも分からん…。もっと低レイヤの知識つけないとこのあたりの理解も進まなそう…。

とは言いつつ、今自分がやりたいのは「Ruby の内部実装を理解したい」ということなので、それにつながる勉強を続けたいと思っています。情報が少なすぎてアレですが、今のところ遠回りでも以下のあたりから勉強しようかなと思っています。

あと C 言語を勉強するにあたっておすすめの本あったら教えていただけると助かりますm(_ _)m