お薦めのコンパイラの本とか

κeenです。たまにお薦めコンパイラの本教えてなどのやりとりをTwitterで見かけるのでまとめておきます。 私の主観が入っているので他の方の意見も参考にして下さい。

普通の入門書三書

よく挙げられるのは通称「ドラゴンブック」、「タイガーブック」、「中田先生の最適化なんちゃらの本」です。 このうちのどれかを読むと良いでしょう。 こういう教科書系の本によくあることですが、本だけでなく挙げられている参考文献の情報も重要なので読み終わっても売らないで本棚に残しておくことをお薦めします。

コンパイラ[第2版]~ 原理・技法・ツール ~

いわゆるドラゴンブックです。結構古くからある本です。前半が構文解析の理論で、後半でコンパイラ関連の技法などが載っています。 割と技法の紹介が多く、幅は広いですがそれぞれの説明に割かれた紙面は小さいです。

章分けが雑なので目次だけで内容を判断せず、手にとって確かめたほうが良いです。 因みに初版と二版で結構内容が変わっているので必ず二版を買いましょう。

想定している言語がCやFortranなので複雑な言語機能の実現方法はあまり載っていません。 代わりにコード解析やコード生成の話が多く載っています。

コンパイラのお勉強、裏で何をしているかを知るには良いですが実際に実装したい人には向かないです。

最新コンパイラ構成技法

いわゆるタイガーブックです。ドラゴンブックに比べてコンパクトです。 ドラゴンブックのように色々な技法を紹介したりはしていませんが、コードや疑似コードが載っているので覚えたことをそのまま実装しやすくなっています。 あと、著者がAppelです。Appelは Standard ML of New Jersey の開発者なので実装も交えた本を書きます。個人的にAppelの本は面白くて好きです。コードもSMLですし。

Tiger言語を作りながら解説していくスタイルです。Tiger言語に必要ない技法はあまり触れられていないです。 しかし発展編でオブジェクト指向、関数型なども扱いますし、ガベージコレクションも1章割いて説明しています。 代わりに最適化の話題は少ないです。

自作言語を作りたいという人に向いています。

コンパイラの構成と最適化

通称はないですが、よく「中田先生の最適化なんちゃらの本」と呼ばれます。みんな名前覚えないんですね。

タイトルに最適化が入っているように、第III部を丸々最適化に割いているのが特徴です。 配列の解析やループ最適化にも1章づつ割いてますし、他にも例えばJITへの言及なんかもあります。

最適化を抜いた解析の話題はドラゴンブックとそう変わらないです。図が多い分こちらの方が分かりやすいです。 構文解析(フロントエンド)にページを割いたドラゴンブックか、最適化(バックエンド)にページを割いたこの本といったところです。

Modern Compiler Design

4書目。最近良さそうだなと思った本です。まだ読んでないです。Springerのサイト落ちてるけど大丈夫かな。

内容はサンプルコードを出しつつ色々な技法に触れているのでタイガーブックを理論で肥らせたような本です。 オブジェクト指向、関数型、論理型プログラミング言語の実現方法も載っています。WAMが載っているのが素晴らしい。

私は読んだこと無いのでどなたか紹介して下さい。

片手間入門書

自作言語とまではいかないけど、野暮用で言語を作る必要があるという際に読む本です。

言語実装パターン――コンパイラ技術によるテキスト処理から言語実装まで

言語の実装のパターンです。「こういうことをしたいときには3種類のパターンがある」のように実装例を挙げている本です。

その他入門

((Pythonで) 書く (Lisp) インタプリタ)

Webの記事です。とりあえず動く、程度のLispインタプリタを作ります。短いので飽きっぽい人にお薦め。

Build Your Own Lisp

本もありますが、オンラインでも読めます。Cに入門しつつLispインタプリタを作ります。 コンパイラを書いているとCを避けられないことがあるので、一度入門するのは悪くないと思います。

速攻MinCamlコンパイラ概説

MLコンパイラをMLで作る解説です。簡単な機能を簡単に実装しているだけなのでコンパクトで分かりやすいです。 簡単とはいってもクロージャなどCコンパイラよりは複雑な機能がありますのでやっつけCコンパイラよりはコンパイラ感があります。

Compiling with Continuations

Appelの本です。継続をベースにMLコンパイラをMLで書く本です。

The Implementation of Functional Programming Languages

Simon Peyton Jonesの本です。似たような名前の同じくSPJの本がありますが、厚い方です。 読んだことはないのですが、お薦めされました。 対象がMirandaらしいですが、関数型一般の話題もあるようです。特にパターンマッチのコンパイルが恐らくこの本にしかないので貴重です。 後半は遅延評価のグラフ簡約だとかG-machineだとかを取り扱っているようです。いつか読みたい。

薄い方、 Implementing Functional Languages はG-macineやTIMなど、ほぼグラフ簡約の話題でした。

発展的話題

コンパイラに必要な部分だけに絞った本です。

High Performance Compilers for Parallel Computers

主にベクトル最適化に絞った本です。多少Fortran特有の話もありますが、理論とアルゴリズムがメインなのであまりFortranは関係ないです。

前半で解析に必要になる基本の線形代数から解説し、ループ誘導変数の発見だとかloop carried dependencyの発見だとかも触れられています。 後半でそれを活かした最適化をやる模様。 まだ読書会では解析の部分しかやってませんがself-containedですしアルゴリズムの疑似コードも載っていますし好評です。 ただし組版がひどいのと例題の数値などに誤りが多いので一人で読むには少しきつそうです。

Optimizing Compilers for Modern Architectures

NUMAやSIMD、マルチコア向けの最適化の本です。上記の本と被りそうであまり被らないです。 適当にしか読んでないのですがキャッシュのヒット率が上がる変換とか手続き間最適化などが載っています。 こちらもアルゴリズムが掲載されています。

ガベージコレクション 自動的メモリ管理を構成する理論と実装

いわゆるGC Handbook。 GCの基本から解説し、長年の研究成果を様々に紹介しています。メモリ管理にある程度踏み込むとOSやCPUのメモリ管理機構の知識が必要になりますが、それも解説されています。 GCは未だにOracle Labから新作がでていたりと最新の知識を身につけるのは難しいですがそれなりの基本知識を身につけるのにこの本は向いています。

型システム入門 プログラミング言語と型の理論

いわゆるTaPL。tanakhさんの解説も参考にして下さい。

型理論の入門書です。少しコンパイラの話題からは逸れますが周辺分野です。 主にコンパイラに機能を追加しようとするときに「本当に大丈夫か」と確認する手段になります。 「この機能を入れたい」「それを入れると決定不能になるから無理」のような判断が紙とペンだけでできます。

LLVM

誰か良書知りませんか。きつねさん本は概要を知るには良い本ですがLLVMのバージョンが上がって知識をそのままは適用できないそうです。

Written by κeen