Scheme Compiler の勉強(31) - 小まとめ
前口上
Abdulaziz Ghuloum さんの "Compilers: Backend to Frontend and Back to Front Again" という文書などを参考にして、LLVM 用 Scheme コンパイラを作りながら、コンパイラ、Scheme、LLVM の勉強をしています。わたしの目的は二つあって、一つは自分がやりたいことのために歴史あるコンパイラ周辺に大量にある技術(の一部)を獲得すること、もう一つは本物の言語処理系を作っているハッカー達がやっていることをより面白く見れるようにすること、です。
やはり手を動かして、またこのような駄文でも外に出してみることで、随分自分のあいまいな知識が明らかになってきた気がします。
Ghuloum さんの文書は、「コンパイラがけっして魔術的な難しいものではない」ことを示すとして、「テストデータを用意し、動くコンパイラを少しずつつくっていく」、というアプローチを取ります。前提知識をほとんど要求せず、既存のコンパイラのアセンブラ出力を利用しながら進めていきます。わたしのトイコンパイラは、かろうじて手続きが定義できていて四則演算ができるというレベルで、今は末尾再帰の最適化の理解と実装を行っています。一応 cons も動いていますがかなり怪しいです。現時点で見えている他の大きな山は、クロージャとGC、継続です。またどのくらい大変なのか範囲も見えていないのが scheme レベルの最適化です。せめて年度内には達成したいですが仕事も忙しいので厳しいかもしれません。当分やれるという気がしないのは自分で自分をコンパイルすることです。そのあとはどこに向かうか決めきれていません。
RnRS 完備というのははるか遠くに見えます。コンパイラインフラである LLVM を使っていてかつ速度や効率、などの本当に大変な部分を無視しているので本来ならずっと簡単なはずなのですが。
必要なもの
- scheme の入門知識
- scheme 処理系
- コンパイラ(gcc or llvm コンパイラインフラのセット)
- PowerPC or X86
- Instruction set
- LLVM http://llvm.org/docs/LangRef.html
- Abdulaziz Ghuloum さんの文書
- 参考書: これから読みたいものand/or一緒に読むべきもの
- OS/Programming http://www.csg.is.titech.ac.jp/~chiba/lecture/os/index.html 東京工業大学 千葉 滋先生
- 「コンピュータの構成と設計」パターソン&ヘネシー
- "Representing Type Information in Dynamically Typed Languages (1998)", David Gudeman
- "Three Implementation Models for Scheme", R. Kent Dybvig まだろくに読んでいませんが、必読のようです。
- SICP
- PAIP("Paradigms of Intelligence Programming", Peter Norvig, Chapter 22, "Scheme: An Uncommon Lisp"
- http://practical-scheme.net/wiliki/schemexref.cgi Scheme Cross Reference
- LLVM 勉強会資料(url)
- http://alohakun.blog7.fc2.com/blog-entry-482.html 最初に知ったのはここ(ホワット・ア・ワンダフル・ワールドさん)
- http://www.memorymanagement.org/ メモリー管理大全。膨大な有用な情報。