Scheme Compiler の勉強(31) - 小まとめ

前口上

Abdulaziz Ghuloum さんの "Compilers: Backend to Frontend and Back to Front Again" という文書などを参考にして、LLVMScheme コンパイラを作りながら、コンパイラSchemeLLVM の勉強をしています。わたしの目的は二つあって、一つは自分がやりたいことのために歴史あるコンパイラ周辺に大量にある技術(の一部)を獲得すること、もう一つは本物の言語処理系を作っているハッカー達がやっていることをより面白く見れるようにすること、です。
やはり手を動かして、またこのような駄文でも外に出してみることで、随分自分のあいまいな知識が明らかになってきた気がします。

Ghuloum さんの文書は、「コンパイラがけっして魔術的な難しいものではない」ことを示すとして、「テストデータを用意し、動くコンパイラを少しずつつくっていく」、というアプローチを取ります。前提知識をほとんど要求せず、既存のコンパイラアセンブラ出力を利用しながら進めていきます。わたしのトイコンパイラは、かろうじて手続きが定義できていて四則演算ができるというレベルで、今は末尾再帰の最適化の理解と実装を行っています。一応 cons も動いていますがかなり怪しいです。現時点で見えている他の大きな山は、クロージャGC、継続です。またどのくらい大変なのか範囲も見えていないのが scheme レベルの最適化です。せめて年度内には達成したいですが仕事も忙しいので厳しいかもしれません。当分やれるという気がしないのは自分で自分をコンパイルすることです。そのあとはどこに向かうか決めきれていません。

RnRS 完備というのははるか遠くに見えます。コンパイラインフラである LLVM を使っていてかつ速度や効率、などの本当に大変な部分を無視しているので本来ならずっと簡単なはずなのですが。

必要なもの

問題

  • 残念ながら文書としては完成していないので、単独でテキストにはなりません。もう少し終わったら作者にメールを出して尋ねてみるつもりです。
  • PowerPC だと苦労します。intel の普通の linux マシンがあるとずっとずっと楽にやれると思います。
  • 高度な最適化については書かれていません。ので、これを勉強してもコンパイラのプロにはなれません。本当に難しい|面白い細部はずっと先にあります。たぶんドラゴンブックとかが次に必要になってくるのでしょう。
  • もうすぐ LLVM が 2.4 になります。文法が変わっていなければいいのですが。