皆様はじめまして,またはお久しぶりです.本書はこれからLLVMを触ってみたいけれども何をどうすればよいか全くわからない,LLVMを一度触ろうとしたけれどもよくわからないので諦めた,という方々の為の,LLVMの基礎的な内容を纏めた書籍です.
LLVMは10年以上前に開発が始まったコンパイラ基盤ですが,ライセンス上の理由などから最近注目度が急上昇しています.言語処理系に興味がないという人でも“LLVM”や“Clang”という単語を耳にする機会が増えたのではないでしょうか.
現在ではClangをはじめ,LLVMを利用した言語処理系も多く存在していますし,LLVMを前提とした言語処理系は今後も増えていくことでしょう.また,一旦LLVMの中間表現にすることでそこからJavascriptやFlash(ActionScript)など様々な言語へ再変換することもできます.LLVMの発展やClangの性能向上,機能拡張が進めば,その結果GCCにも同様の特徴が取り入れられるといったことも考えられます.このようにLLVMは様々なところでインフラとして利用されており,LLVM自体を普及することにも大きな意味があると言えるでしょう.
ところがLLVMに関する日本語の情報は多くなく,また,LLVMを取り扱った書籍は日本語でなくともおそらく存在しないと思います.少なくともLLVMを解説した日本語の書籍は初心者向け,上級者向け問わず見当たりません.これは,LLVMのバージョンアップの頻度が高いこと,LLVMの公式ドキュメントがある程度充実していること,などなど様々な理由があってのことだと考えられますが,非常に残念なことです.LLVMという有用なインフラがそこにあるにも関わらず,興味を持った人が何から触っていいかよくわからない,何をどうすればわかるのかもわからないという状況に陥る可能性があるのですから.私が初めてLLVMに触れたのはバージョン2.6の頃でしたが,当時もやはり情報が少なく,苦労しながら少しずつ理解していったのを覚えています.
本書はその様な状況を打開し,初心者がLLVMを触っていくための第一歩を応援したい,LLVMをもっと普及させていきたいという思いから生まれました.どんなことにも共通しているかもしれませんが,最初の第一歩が重要かつ大変なことで,そこでつまずき,諦めてしまう人は多くいることでしょう.逆に少し慣れてしまえば後は応用で何とかなるもので,LLVMも最初の第一歩をしっかりと踏み出すことができれば,徐々に歩き方がわかっていくと思います.本書がその助けになれば幸いです.
本書ではフロントエンドの作り方を字句解析から順に説明しています.また,LLVM のコアである最適化などを行うパスの作り方の説明,オブジェクト生成までを説明したバックエンドの作り方の紹介とLLVMを使用してコンパイラを作成するうえで必要になることを一通り網羅しています.LLVMの内部実装の深いところまで紹介しきれているわけではありませんが,多くの人に有用な情報を含んでいると思います.本書を参考にLLVM 関連プロジェクトへのコミット,もしくは新たなプロジェクトを作成されることを期待します.
最後になりましたが,本書は元々は自費出版という形で公開していたものになります.その後たくさんの方から要望を頂き,より多くの方に手にとって頂くために電子書籍化しました.電子書籍化後も多くの反響があり,その結果今回の出版のお話を頂くことになりました.これまでお世話になった方々に感謝申し上げます.無理なお願いが多々あったにもかかわらず快く電子書籍を公開する場を提供してくださった 達人出版会の高橋様,そして難しいスケジュールだったにもかかわらずコメントをくださったレビュアーの @shtaxxxさん,@saten_kanaeさん,自費出版を行っていた時から応援してくださった@xhl_kogitsuneさん,@finalfusionさん,その他すべての読者の方々に改めて感謝申し上げます.