Skip to content

Instantly share code, notes, and snippets.

@ak1t0
Created June 16, 2016 09:17
Show Gist options
  • Save ak1t0/2bd8d08b154fc652f93b84f75703589e to your computer and use it in GitHub Desktop.
Save ak1t0/2bd8d08b154fc652f93b84f75703589e to your computer and use it in GitHub Desktop.

Clover

概要

CloverはClojureライクな文法をもつコンパイラ型の言語処理系です。

動機

ClojureはJVM(JavaVirtualMachine)上で動くLispの一種で、JVM上で動くことは既存のライブラリが使えるなど利点もあるのですが、REPLの起動にJVMの起動が必要だったり実行ファイルがjar形式だったりと制約も多く、Clojureの文法を持つコンパイラ型の処理系が欲しいと思ったので作りました。また、ClojureのJVM以外への移植はClojureScript(altJS)やCLR(.NET)などがあります。

技術的概要

Parsecによって抽象構文木を生成し、その構文木をGoに変換して、内部からGoコンパイラを呼んでコンパイルする形になっています。

KPT

Keep

  • パーザーコンビネータによるASTの生成
    構文解析を抽象度を保ったまま短いコードで行うことができた。

Problem

  • 文法の設計の欠如
    Clojureの完全互換を目指すのかあくまでフレーバーにするのかが曖昧だった。

  • 実用性の欠如
    速度やライブラリに関する視点が欠けていた。

Try

  • LLVM
    GoによるトランスパイルではなくLLVMへ

  • 実用性
    ライブラリや速度などの視点も加えて設計する

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment