773 Views
July 20, 23
スライド概要
コンパイラ写経のススメ(感想) RICORA 覚道健太郎 Bluesky: @kakudo.org 1 / 13
自己紹介 4 東京理科大学 創域理工学部 数理科学科 年 Rustが好き テキストエディタとかを書いている Webも好き しょうもなサービスを産んでは閉じている 2 / 13
自力でコンパイラ書けますか? そもそも構文解析できる? アセンブリでどうやって関数を作るの? え、そもそも変数って何なんだ・・・ ポインタをどう表現するんですか!? ―― 僕は無理でした 3 / 13
書き方を教えてくれる本はあるけれど・・・ もちろん、有名な本はたくさんある ・・・・・・けど分厚い。かなり進めないと全容が見えない。 例 『最新コンパイラ構成技法』 238ページまで進めてやっと基礎編終了 4 / 13
手取り足取り教えてもらう方法 それが写経だ~! --> さっそく有名コンパイラのコードを見てみよう! 5 / 13
・・・・・・。 : 例 主なコンパイラのコード行数 GCC: 約2000万行 LLVM: 約3000万行 6 / 13
Compilerbook Rui Ueyamaさんの公開されているオンラインブック https://www.sigbus.info/compilerbook 細かくお手本コードがある 周辺知識についても親切な記述がある 日本語で書かれている(一部に重要) コンパイラを書きながら、低レイヤに詳しくなれる! 7 / 13
実際進めてみる 1 なになに・・・・・・最初のステップは数字を つコンパイルする?なんじゃそりゃ? 最初のテストコード 42 実行結果 (終了コード42でプログラムが直ちに終了する) 8 / 13
インクリメンタルな開発 Compilerbookでは、全部のステージで小さなC言語が "コンパイル" できる ようにする 教科書などでよくある、 構文解析 -> 意味解析 -> 中間表現 -> ・・・ と各パーツを完成させていくのとは対照的。 9 / 13
どんどん動く! 1. 数字ひとつ 2. 足し算・引き算 3. 字句解析機 4. エラーメッセージ 5. 四則演算 9. ⋮ return 文 ⋮ 10 / 13
15ステップくらいで、これくらいのコードが動くようになる int countsum(int c) { int sum; sum = 0; int i; for (i = 0; i <= c; i = i + 1) { sum = sum + i; } return sum; } int main() { return countsum(14); } 読みながら無理なく進めているのに、いつの間にかできてしまう感覚 11 / 13
それでもムズいときはある Compilerbookを進めている人たちのコードを読もう! たくさんの仲間が書いているので、同じ問題に勝利した人たちがいる 12 / 13
天才じゃない僕たちは天才の真似から始めよう 天才でさえ、大きなプログラムをガッと書けるわけではない(はず) 小さいステップで進めよう! テストは大事 13 / 13