💡

コンパイラ関連の本とかリンクとかの自分用メモ

2024/08/14に公開

前提

  • コンパイラについてほぼ何も知らない素人
  • 目的としては、プログラミング言語をつくるプロジェクトにコントリビュートしたい(ので、それに十分な知識であればとりあえずよく、自分でフルスクラッチでコンパイラを書ける必要はない)

資料

Crafting Interpreters

https://craftinginterpreters.com/

読んだ。

  • オンラインで無料でも読めるけど、日本語訳が出てるので読みやすい。
    • 翻訳の質は、誤植っぽいのがちらほら見つかるけど、まあ悪くないと思った
  • インタプリタの作り方だけど後半にコンパイラのことも載ってる。そもそもインタプリタとコンパイラって何が違うの?、という状態だったので、1冊目に読む本としてはよかった気がする。
  • 動的型付け言語だったので、型チェックとかそういう話は知ることができなかった
  • 配列を扱う方法を知ることができなかった

Build A Lua Interpreter In Rust

https://wubingzheng.github.io/build-lua-in-rust/en/

教えてもらった本。つまみ読みした程度。

  • register-based と stack-based の違いとかは Crafting Interpreters には書かれてなかったので勉強になった
  • Lua も動的型付け言語なので、型チェックとかはわからなそう

Writing A Compiler In Go

https://compilerbook.com/

買ってない。

「Writing A Interpreter In Go」という本(こっちは邦訳も出てる)が先に出ていて、これはその続編という位置づけ。目次を見る感じはよさそう。これも動的型付け言語らしい。

Engineering A Compiler

https://shop.elsevier.com/books/engineering-a-compiler/cooper/978-0-12-815412-0

買ってない。

「ドラゴンブックを買うしかないのか...?」と思っていろいろ探して、Redditのおすすめコンパイラ本の議論とかを読む感じ、この本がドラゴンブックの現代版、みたいな感じらしい。目次を見る感じよさそうだけど、ちょっと今の自分が読むには難しそう。ということで保留。

Introduction to Compilers and Language Design

https://www3.nd.edu/~dthain/compilerbook/

無料で読めるけどまだ読んでない。

ノートルダム大学の CS の授業のテキストらしい。Engineering A Compilerについて探しているときにRedditで、同じような内容で初心者向けならこっち、みたいなコメントをしてる人がいて知った。

パラパラ見た感じ、各トピックについてそれほど詳しく書かれているわけではなさそう。なので、全体感を知るにはいいけど、突っ込んだところは他のテキストを見る必要がある。

Writing a C Compiler

https://nostarch.com/writing-c-compiler

買ってない。が、買うか迷い中。

2023年に出版予定が遅延して、タイミングよく来週(2024年8月20日)発売予定らしい。

知りたいこととはちょっと違うけど、まあまあ評判よさそうな雰囲気だし、静的型付け言語の本もどれか読んでおきたい感じはするし、というあたりで気になってる。でも、アセンブリまでやりたいわけじゃないしなあ、というのが思いとどまるポイント。

低レイヤを知りたい人のためのCコンパイラ作成入門

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

読んでない。

moldの作者なだけあって、リンクの話とかは充実してそうなのでそこだけ読みたいなと思ってる。

その他参考になりそうなもの

The Rust Reference の文法関連の章

https://doc.rust-lang.org/reference/statements-and-expressions.html

パーサがどう実装されてるかとかはたぶんまた別の話だけど、どういう分類になってるのかとかはいろいろ勉強になったりする。例えば、assignment は statement ではなく expression だけど、なんでだろうと思って調べたら、たぶん「返り値 () の expression」として扱った方が、==と間違えて=と打ってしまった時も、ちゃんとパースはできてその上で型のミスマッチでエラーを検知できるから、といううれしさがあるらしく、なるほどなーと思った。

Rust Compiler Development Guide

https://rustc-dev-guide.rust-lang.org/

どのフェーズで何をやってるかとかが書かれてるので参考になるかも。あと、まだ LLVM の本を見つけられてなくて、LLVM をバックエンドにするときのやり方とかも参考になるといいなと思ってる。

Compiler Explorer

https://godbolt.org/

「このRustのコードってどういうアセンブリなるんだろう?」と思った時に調べられる。-C opt-level=0をつけると最適化前のものが出てくる。

WGSL

WebGPU のシェーダー言語。比較的シンプルなので、定義とか実装とか見やすいかもと思って一応メモ。

Spec

https://www.w3.org/TR/WGSL/

Rust と同じく文法の定義の仕方とかが参考になりそう

naga

https://github.com/gfx-rs/wgpu/tree/trunk/naga

WebGPU の Rust 実装の一部で、シェーダー言語間の変換を行う。つまり、これはトランスパイラなので、やりたいこととちょっと違うけど、まあパースの仕方とかは参考になることもあるかと思って一応メモ。ちなみに、昔はchumskyを使ってたけど速度的な問題で?やめて独自実装にしたらしい。

Rust製のプログラミング言語一覧

https://github.com/alilleybrinker/langs-in-rust

番外編

Building a Debugger

https://nostarch.com/building-a-debugger

2025年発売予定。

コンパイラのことはあまり知れなそうだけど、デバッガを書きたくなったら参考になりそう。

Discussion