CloverはClojureライクな文法をもつコンパイラ型の言語処理系です。
ClojureはJVM(JavaVirtualMachine)上で動くLispの一種で、JVM上で動くことは既存のライブラリが使えるなど利点もあるのですが、REPLの起動にJVMの起動が必要だったり実行ファイルがjar形式だったりと制約も多く、Clojureの文法を持つコンパイラ型の処理系が欲しいと思ったので作りました。また、ClojureのJVM以外への移植はClojureScript(altJS)やCLR(.NET)などがあります。
Parsecによって抽象構文木を生成し、その構文木をGoに変換して、内部からGoコンパイラを呼んでコンパイルする形になっています。
- パーザーコンビネータによるASTの生成
構文解析を抽象度を保ったまま短いコードで行うことができた。
-
文法の設計の欠如
Clojureの完全互換を目指すのかあくまでフレーバーにするのかが曖昧だった。 -
実用性の欠如
速度やライブラリに関する視点が欠けていた。
-
LLVM
GoによるトランスパイルではなくLLVMへ -
実用性
ライブラリや速度などの視点も加えて設計する