今日もキャリアブレイク中に具体的にやっている勉強について書きます。その③は「コンパイラ自作」です。
コンパイラ作成
コンパイラを自作したいと思ったきっかけは、セルフホストできるCコンパイラの作り方を夏休みの特別授業で教えた話を聞いたからです。ただ少なくとも普段から聞いているポッドキャストでもないし、なのに1話目でもなく30話目を聞いている理由も謎だし、自発的に選ぶタイトルでもない(少なくとも過去作りたい!と思ったことはない)ので、このポッドキャストを聞いたきっかけが全く思い出せません。。。まあ何か心のアンテナに引っかかったのでしょうか。
教材
兎にも角にも、コンパイラを作ったらより低レイヤーの知らないことが分かるかもしれないと思って、低レイヤを知りたい人のためのCコンパイラ作成入門を読んでいます。余談ですが、このサイトを見るまで、自分はハードに近いプログラミングを低レベルと言っていましたが、このサイトを見てから低レイヤーと呼ぶようにしましたw。
スタイル
勉強スタイルは昨日書いたCSと同じで、淡々と読み、気になった所はDiscordにメモしつつ、コードは写経しています。このスタイルは自分の中では確立してきているようで、今後他の勉強をする時も多分同じスタイルでやると思います。
画面分割
僕は32インチのディスプレイ1枚で作業しているので、CSも、コンパイラ作成も、ウィンドウを2分割して左側(Windowsキー+←)を教材、右側(Windowsキー+→)をメモに使っています。左側が教材で、右側上下でメモとコードにしたこともありますが、体験がイマイチだったので、コードの時は切り替えています。
進行
今のところ、教材の半分ぐらい進んでいます。ただCSのように常に把握しながら進んでいる感じではなく、書いてあることは理解出来たし、コードは写経しているけれど、実際にこれで自分でコンパイラが作れるぐらい理解出来ているかは、自分もよく分かっていません。一旦全部読まないと評価が出来ないですね。。
得られているもの
普通に読んでいるだけでも抽象構文木とかスタックマシーンとか学べていることは結構あるし、何よりコンパイラ作成してなければ得られないだろうなと思う知識は結構あります。コラムも面白いし、特に自分はアセンブラは本当にちょっとしか組んだことがないので、C言語のprintf出力でアセンブラを作っていく感じは、なかなか刺激的です。
リンク
CSの勉強をしていると、コンパイラの話が出てきます。CSとコンパイラ作成はリンクする部分もあるので、そういう意味では相乗効果があり、あ、これさっきやったことと似ているなと思う体験もちらほらあります。近しい2つのことを同時に学ぶのは学習効果としても意味があるのかなと思います。
モチベーション
実は勉強課題で選びはしたのですが、Cコンパイラに対して作りたいモチベーションはあまり強くありません。でもC#コンパイラなら話は別です!作ってみたい気持ちがニョキニョキと出てきます。とはいえ、方向転換するにしても書かれている内容の理解は必須だと思うので、一旦はテキストを最後まで読もうと思っています。
まとめ
コンパイラ作成も、毎日1時間取っていますが、1日の勉強時間がMAXで取れない日などはわりとコンパイラ作成を短くしたり、削ったりすることもあります。ただペース的には一番早く終わる可能性が高そうだし、その後は、低レイヤー講演会で見たオレオレ抽象機械の方向に進むのも面白そうだなーと思っています。