2014年10月10日金曜日

ブログを始めるにあたって

このブログは私kimrinがコンパイラ技術について色んな試行錯誤を経て最終的に1冊の本になるような情報を蓄積していくことを目的とした、自己鍛錬のブログです♡

2006年くらいにAspectJ(Javaの方言)の静的解析系を作った事がある程度のレベルです。なので初心者ではないですが、フルスクラッチでコンパイラを書いた、というレベルでもないです。

このブログがコンパイラ技術に興味を持っている人にとって、興味をそそるようなブログになることを願っています。どうぞ宜しくお願い致します。

ちなみに私は今日40歳の誕生日を迎えました。技術者として一つの節目を迎えたわけです。そこで自分に「何がやりたい?」と自問してみると、やっぱり昔取った杵柄(きねづか)の、コンパイラ技術について、さらに深めて行きたいしできれば一つのプログラミング言語を作れたらという思いがとても強かったです。なので僕にとって今日はコンパイラ記念日ですw

これだけだとコンパイラについて何の情報もないので、コンパイラの教科書について僕の持っている情報を展開しておきましょう。一方的な解説なので、もし間違いなどありましたらご指摘願います。

Information & Computing 別巻38

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

A.V.エイホ
M.S.ラム
R.セシィ
J.D.ウルマン 著
原田賢一(慶應義塾大学名誉教授) 訳

http://www.saiensu.co.jp/?page=book_details&ISBN=ISBN978-4-7819-1229-5

表紙にドラゴンの絵が書かれているので、「ドラゴンブック」といいます。特に、最近(といっても5年以上前ですが。。。)出た第二版は「パープルドラゴンブック」と呼ばれ、世界中でコンパイラの教科書として使用されているようです。

僕は原書をある程度つまみ食いしたたちですが、あの英文を読んでいると心が落ち着きます(そこかw)。

恐らくC言語やJava言語あたりを想定しているような記述が中心です。関数型言語については若干解説があります。あとJVMのような仮想機械についての話も若干解説があります。ただターゲットは昔からのコンパイラ言語、という感じがします。

ドラゴンブックはまずLexer, Parserの基本的な技術を中心に進み、記号表などの話のあとでDAGから3番地命令を生成するところあたりがハイライトかと思います。そして最適化の話があって、CFG(コントロールフローグラフ)上での最適化の話があって、と言う感じです。最終章付近には静的解析系の話なんかもあります。

僕の所感は「教科書ですね」です。古来からのコンパイラ技術の解説が惜しみなくされていて、コンパイラ技術の総合デパートという感じで楽しいです。ただ、やはり実用性や即効性(すぐに投入できる技術)としては(ターゲットの技術にも依りますが)ちょっと教科書しちゃってるかな、って感じがしますです。

想定されている読者はコンピュータサイエンスを学ぶ大学生です(多分)。なのでGCCの最適化について知りたい読者や、コンパイルオプションについて知りたい人にとって、おそらくこの本はやや回り道です。しかしコンパイラに必要な技術を体系的に学びたい人にとっては、この本は福音とも呼べる内容です。

個別の章について見て行くと、Lexer, Parser(LL(k), LALR(1))の章はコンパイラ技術のパーサーの部分についての章ですが、コンパイラコンパイラがある言語でコンパイラを書く人にとっては完璧に理解する必要はないと思います。逆にLexical scanner generator や compiler-compilerを作りたい人はこれらの章は必見です。コンパイラの技術の中心は、先ほども触れた、式をDAGにして、そのDAGから3番地コードを導くところが本質です。3番地コードとは、仮想的なCPUインストラクションで、非常に基本的な命令が備わっている命令セットと思えばいいと思います。

後半は最適化が中心ですが、僕が個人的に一番楽しいのでは、と思う箇所はやはりCFGのグラフを使った最適化だと思います。またdataflow analysisのところも読んでいて楽しかったです。

最新コンパイラ構成技法

Andrew W. Appel (著 )/ 神林靖 (訳 )/ 滝本宗宏 (訳 )/ 翔泳社 (出版社 )
http://www.seshop.com/product/detail/11456/

こちらは表紙にトラが書かれているのでタイガーブックと呼ばれています。中日ファンはドラゴンブックを、阪神ファンはタイガーブックを選んでください(嘘です。ごめんなさいw)

AppelさんはSMLと呼ばれる言語ファミリーの実装者のお一人と聞いています。type inferenceなどについてはTAPLがよい解説書だと思われますが、こちらの本はtigerというtype inferenceの無い言語を作って行く本です。ちなみにAppel先生はプリンストン大学の先生なのですが、トラはプリンストン大学のシンボルなのだそうです。

ややドラゴンブックよりも新しいトピックを、急ぎ足で取り扱っている感じがします。そのためSSA形式などのやや先進的な内容についての記述があり有り難いです。どちらかというとドラゴンブックが教科書的にコンパイラの諸処の問題を扱っているのに対して、タイガーブックはすぐ使えるような技術を具体的に記述している感じがします。

ただ、洋書は間違いが多かったと聞いています。和書では直っているといいですね。

コンパイラ技術に興味があるなら、両方持っている、が正解でしょう。








0 件のコメント:

コメントを投稿