[scheme] Scheme Compiler の勉強(13)
区切りがいいので少しまとめてみる。
"An Incremental Approach to Compiler Construction" & "Compilers: Backend to Frontend and Back to Front Again" は, Abdulaziz Ghuloum によって書かれた合わせても50ページほど、 Scheme のネイティブコンパイラを Scheme 自身でインクリメンタルに少しずつ作っていく、という教材的な文書。コンパイラを作ることが魔術的なものではないことを示すために書かれたもので、量からも明らかなように、コンパイラの奥深い技術を学ぶためのものではない。Scheme と CPU と C のごく基礎的知識があれば、進めることができる。gcc でアセンブラを出力させながら、最初は数字1つを出力するだけの"コンパイラ"からはじまり、少しずつ機能を追加していくというアプローチのため、最初の段階から動くコンパイラが得られることが魅力。
現在わたしはこの文書で勉強中。
コンパイラ本体の compiler.scm, テスト用の tests-driver.scm とテストデータ、C で書く runtime.c からなる簡単な系。compiler.scm と runtime.c を少しずつ作っていく。要 scheme 処理系、要 gcc。
良い点:
- いまのところ(1.3 の途中、全部で1.9まで)なんとか内容についていけている。今朝 fixnum? を実装。
- 元文書のターゲットは i386 用。そのままでは面白くないので、 LLVM 用として一緒に LLVM を勉強。ユニットテストが動作していることから、おそらくちゃんと動作しているはず。
- テストを追加しながら進める開発は楽しい。
- 調べながら進めるのも楽しい。
- scheme コンパイラを一度でも作っておくと、本物の scheme/lisp 処理系(国産だけでも gauche, mosh, ypsilon, Maeve)で開発者がやっている面白さ/苦労を、より面白く見ることができる。(Lisp を追いかけていると自身がスーパーハッカーでなくとも必ずなんらかの面白いものが見られる、というのはたぶん事実。)
悪い点: