Koriel.Monadic
Koriel.Monadic
新規に設計中の中間表現
コンセプト
Koriel.Coreの反省点のフィードバック
複数の言語へのコンパイルを容易に
中間表現のシリアライゼーション
GRINの影響
メモリ操作と例外をいい感じに表現
Koriel.Monadicの型システム
castの役割
polymorphic types
型変数aをTPtr TAnyに置き換える
recursive types
fold, unfold
castの置き換え
Λ, fold, unfoldに分けるべき?
ΛはExp?Value?
Λ a. eなのでExp
最終的に型消去する?
Λ, fold, unfoldなどをcast系演算子として捉える
それぞれをcastで置き換えるパス(=型消去)
再帰型の扱い(ここでの「再帰型」は、例えば type Tree = Leaf | Node Int Tree Tree のように、型名の再帰的な束縛を指す。μによる表現は「μ型」と呼ぶことにする)
多くの言語(LLVM IRを含む)に再帰型がある
ここでの「再帰型」は、例えば type Tree = Leaf | Node Int Tree Tree のように、型名の再帰的な束縛を指す
再帰型を持つ言語を、別の再帰型を持つ言語へコンパイルする際に、再帰型を除去する必要はない
再帰型を持たない言語も存在する
確かCranelift IRにはない
再帰型を持つ言語から、再帰型を持たない言語へコンパイルする際に、再帰型を除去する必要はある
以上のことから、LLVM IRをメインターゲットとするKoriel.Monadicでは、μ型を導入する必要はない。