Arantium Maestum

プログラミング、囲碁、読書の話題

HaskellでLisp to LLVM IRコンパイラ その1

とりあえず作り始めた。

github.com

基本戦略としては、まずは数値計算だけのコードをLLVM IRに変換するのを目的に:

Lispコード→LispVal型データ構造→SSA IR→LLVM IR

の流れでコンパイルしていく。

長期的にはLLVM IR上でLispValを表すStructを作る必要があるのかなーと漠然と考えているが、まだ先のことである。

かなり長い間、LLVM IRとにらめっこしていて「どうしたらASTからLLVMに変換できるだろう」と悩んでいたのだが、中間言語を間にかませると変換がわかりやすくなった。純粋な形でのAST→SSAの変換と、SSALLVM IRに特殊化させる変換をわけて考えるのがポイント。

REPLと違ってチュートリアルを再構築するわけではないので色々と手探りになるがかなり楽しみ。