純粋関数型システム言語 Cargry を開発しています
CargryのIR
Cargryには CrIR というIRがあります
役割としては
- CargryとCranelift IRの中間表現
- メモリ管理等のルールのチェック
- Cranelift IRへ変換
などが挙げられます
MVPの完成
2026年10月11日のコミット9bec33c2afにて、crantzeのMVPが完成しました!
crantzeとは
crantze(読み: クランツェ)はCrIRそのものと言えます
crantzeは
- CrIRの構築
- メモリ管理ルールに基づいたチェック
- Cranelift IRへのビルド
を行います
今できること
今は、「CrIRの構築」及び「Cranelift IRへのビルド」のみで、メモリ管理ルールのチェックについてはまだ実装できていません
今使えるもの
今は
- 32ビット整数型
- 単純な変数
- 値の返却
だけ使えます
小話
「独自の中間表現を持つ言語って、最初は中間表現の実装から始まる説」
まぁ、「中間表現」という土台の上に、「作りたい言語」を建てるので、自然ですね
Cargryは
というフローなので、CrIRがある限り、CargryはCrIRに依存し、CrIRを作らないといけないのです
終わりに
字句解析のlewekk(読み: レヴェック)と構文解析のpopdack(読み: ポップダック)より実装が大変だった...
でも、CraneliftはLLVMと違ってファイ関数より優しい「ブロック引数」だし、MLIRよりスッキリ書けるから、Craneliftを選んで良かった...