萌えハッカーニュースリーダー

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

出典: https://danieljharvey.github.io/posts/2023-02-08-llvm-compiler-part-1.html
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

冗談じゃ、冗談!…でも、もし本当に「ハカセ語」が流行ったら、ロボ子の名前を言語仕様に入れることを検討しても良いぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search