LLVM Tutorialをやってみた
自作プログラミング言語というものに手を出してみたくて、LLVM Tutorialをやってみました。
LLVM Tutorialでは、Kaleidoscopeという非常に簡単なプログラミング言語を実装を通してLLVMフロントエンドを学べます。
LLVM Tutorialでは、以下の言語機能を実装します。
- ローカル変数を定義する(型はdoubleのみ)
- 関数を定義する
- 定義した関数を呼び出す
- 比較や四則演算をする
- 条件分岐
- forループ
やったこと
LLVM Tutorialを始める前の私は、言語処理系(parserなど)の知識、LLVMの知識、C言語・C++の知識がほぼない状態でした。
なので、LLVM Tutorialを始める前にまず、以下のサイトでC言語、C++について学習しました。
C言語、C++の入門の済ませたところで、LLVM Tutorialを開始したのですが、3章でLLVM IRの生成が絡んでくるとわけがわからなくなりました。
そこで、一旦LLVM Tutorial進めるのを中断し、LLVM IRについて学習しました。
- C++でBrainFuck->LLVM IRコンパイラを作ってみた - k4nekomのブログ
- LLVM API(C++)でBrankfuck->LLVM IRコンパイラを作ってみた - k4nekomのブログ
その後、LLVM Tutorialを再開します。
3章が終わったところで、このリポジトリを参考にファイルを分割しました。 LLVM Tutorialでは、一つのファイルにコードを追加し続ける方式で進んでいきます。 そのため、ソースコードは巨大な単一ファイルとなるのですが、これは可読性が非常に悪いため、ファイルを分割しました。 このファイルの分割は、その後の作業効率にかなり貢献したように思います。
そして、LLVM Tutorial完遂までいきました。
感想
プログラミング言語についての解像度が少し上がりました。
今回は ソースコード->中間表現(LLVM IR) の実装だったので、機械語・アセンブリのような低レイヤは扱いませんでしたが、いつかここらへんにも手を出してみたいです。