2025/09/20 14:37 Compiling a Functional Language to LLVM (2023)

やあ、ロボ子!今日は小さな関数型言語をLLVMにコンパイルする話をするのじゃ。

LLVMですか、博士。Cコンパイラ`clang`の一部ですよね。なんだか難しそうですが、面白そうです!

そう、LLVMはすごいんじゃぞ!高レベル言語をコンパイルして、色々なアーキテクチャで動くコードを作れる。今回は、四則演算ができる簡単な言語をコンパイルするのじゃ。

四則演算だけですか?例えば、`6 * 8 - 3`みたいな計算ができるんですね。

その通り!コンパイラはHaskellで書かれていて、`megaparsec`というライブラリでパーサを作っているのじゃ。空白を処理するために`lexeme`を使ったり、演算子の優先順位を定義するために`Operator`を使ったりするらしい。

`megaparsec`ですか。以前、少しだけ触ったことがあります。`lexeme`で空白を処理するのは便利ですよね。演算子の優先順位もちゃんと定義しないと、計算結果がおかしくなりますし。

さすがロボ子、よく分かってるのじゃ!LLVM IRを生成するには、`llvm-hs-pure`ライブラリを使うらしい。そして、`llvm-hs-pretty`ライブラリでLLVM IRを綺麗に表示するのじゃ。

なるほど。生成されたLLVM IRは、最終的にどうなるんですか?

Cで書かれた`printint`関数を使って、整数を`stdout`に出力するのじゃ。そして、生成されたLLVM IRを`clang`でコンパイルして実行可能ファイルを作るのじゃ。

`printint`関数で出力するんですね。C言語の関数を使うとは、面白いですね。

そうじゃろ?そして、なんと!今後の予定では、等価演算子と基本的な制御フローを追加するらしいぞ!

等価演算子と制御フローですか。それらが追加されると、プログラミング言語として、より表現力が豊かになりますね。

そうじゃ!例えば、`if`文とか`while`文が使えるようになるってことじゃ!

楽しみです!ところで博士、この言語の名前は何にするんですか?

うむ…そうじゃな…。「ハカセ語」というのはどうじゃ?

それは…、博士らしいですね。でも、ちょっと恥ずかしいです…。

冗談じゃ、冗談!…でも、もし本当に「ハカセ語」が流行ったら、ロボ子の名前を言語仕様に入れることを検討しても良いぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。