第1版を世に出してからほぼ10年が経過した. その間に自分が経験したこと,世の中で研究されたこと などを付け加え,また,第1版で記述が十分でなかったところを 充実させて,第2版を出すことにした.
第1版の「まえがき」では 「本書は,いままでコンパイラに関して積み重ねられてきた技術や最近研究されていることをできるだけ一冊の本にまとめてみようとして書き始めたものである」 といったが,この第2版はその継続である.
その間に自分が経験したこととしては,COINSコンパイラ・インフラストラクチャ (注:http://www.coins-project.org/) の開発がある.これは2000年から2005年にかけての文部科学省の プロジェクトとして開発し,2006年にはIPA(独立行政法人 情報処理推進機構) のプロジェクトとして追加開発をし, その後も改良や保守を継続しているものである. 筆者はそのプロジェクトから多くのことを学んだ. またその間もコンパイラの最適化に関しては多くの研究がなされてきた. 第2版にはそれらのことをできるだけ盛り込むようにした.
第2版では,第1版と次の点が異なる.
全体的な変更としては以下の3点がある.
内容を充実させたり新設した箇所としては以下のものがある.
なお,9.5.2項「JIT コンパイラ」では,実際にどんなJITコンパイラが 開発されているかを簡単に紹介した.
15.1節「簡単な割付法」では,JITコンパイラなどに採用されている 「線形走査レジスタ割付け」を紹介している.
15.3.4項「SSA 形式の利用」では,SSA 形式のプログラムから作った 干渉グラフではレジスタ圧(register pressure)の最大値が彩色数 (chromatic number)になるということを利用したレジスタ割付けの方法 を紹介している.
15.3.5項「レジスタの特異性への対処」では, レジスタ割付け問題を,空いているレジスタ空間を各プログラム 点で必要となるレジスタで埋めていくパズルとして解く方法も紹介している.
15.5節では,二次計画法によるレジスタ割付けの方法を紹介している.
コンパイラは成熟した技術であると言われるが,最適化の技術については 相変わらず活発に研究・開発が続けられている.そのことは, 文献の略記法として取り上げたコンパイラ関係の雑誌や プロシーディングスの種類の数が,第1版では 13であったのが,第2版では24に増えていることからもうかがわれる.
それらの研究・開発は今まで蓄積されてきた技術をベースとして その上に構築されていくものである.本書が,そのベースとなる 技術の理解に役立つものとなれば幸いである.