brly.github.io
Reading
10 Nov 2018

ドラゴンブックを読む

幸いにも、隣の席の同僚にあたる先輩エンジニアが持っていたらしく借りた。 そして、数日で読み終わった。斜め読みである。内容が難しすぎる。

https://www.sigbus.info/compilerbook/

ドラゴンブックを読む前に、上の rui314 さんによる作成入門を読んでいた(現時点ではステップ7まで) のだが、 こちらの説明の続きを期待して読んでいたら、あまりに難解かつ、アグレッシブに寄り道をしていくので読んでいて辟易していた。

良い本なのかもしれないが、あまりに詳しく解説しようとしすぎているようにも見える。 言いたくなるのはわかるが、そこまで話すのかと言うような。冗長な箇所が多いので読み飛ばす部分が多かった。

作成入門で簡単に言っていたことを、わざわざ難しく言い直しているかのように捉えてしまった。

それでも現時点で作成入門の方でまだ言及のない最適化周りの話はやはり読んでいて面白かった。 共通部分式とか基本ブロックとかレジスタ割り付けとかソフトウェアパイプラインとかメモリアクセスのブロック化とか ここまで頑張ってくれるなら頑張ってチューニングしなくても良いのでは?と思ったりする。 なんかグラフの話が多かった。

あとは作成入門で言及のなかった、トークナイザ/パーザー (lex/yacc) の話も出てくる。

後半の datalog 周辺のやつは全く読まなかった..。

そういえば、コンパイラといえば型!なイメージだけど、1000p くらいある中で型のセクションは 20p くらいだったような気がする。

rui314 さんのコンパイラ作成入門が進むことを期待して待つ。

そういえば、もともとこの本が読みたいとするモチベーションは、リンカ・ローダの本に感銘を受けて elf なりの オブジェクトファイルはどこからどうやってくるの?という疑問からだったが、オブジェクトファイルはアセンブリを入力として アセンブラが吐くものだったので、オブジェクトファイルはアセンブラから来るのだった。 対して、ドラゴンブックのコンパイラは狭義のコンパイラであり、ソースからアセンブリを吐くものだった。

アセンブリからアセンブラの変換に関する本、はあまり見かけないのだけど、大したことはしていないのだろうか。

https://ja.wikipedia.org/wiki/アセンブリ言語