Clojerl 是构建在 Erlang VM 之上的【实验性】Clojure 实现,目标是结合 Clojure 的功能和理念(如宏、集合、序列、协议、多方法和元数据等),再加上 Erlang VM 的健壮性,综合两者的长处来构建【分布式】系统。
初衷
Erlang 是构建安全,可靠和可扩展系统的优秀编程语言。它提供了开箱即用、不可变、且具有持久性的数据结构,其自带的并发语义是任何其他语言无法比拟的。
Clojure 属于 Lisp 方言,因此它继承了 Lisps 的良好特性。除了这些,Clojure 还引入了其他功能,例如协议、多方法和序列等。
Clojure 旨在简化并发程序的开发,并且它的一些并发抽象也适用于 Erlang。将 Erlang VM 的强大功能与 Clojure 的表现力相结合,可以提供一个有趣且有用的结果,使开发者的生活更简单,让世界变得更加幸福。
目标
- 提供尽可能顺畅的互操作性,像 Clojure proper 和 ClojureScript 一样
- 提供大多数 Clojure 抽象
- 提供所有 Erlang 抽象和工具集
- 在 Clojerl 中引入默认的 OTP 库
环境要求
构建 clojerl
需要 Erlang/OTP 18+ 以及 rebar3。
git clone https://github.com/clojerl/clojerl
cd clojerl
make
示例代码
case.clje
(ns examples.case)
(let* [x :b
y (case* x
:a 1
:b 2
:c 3)
z (case* y
x 2
#erl [:default :value])]
(erlang/display x)
(erlang/display y)
(erlang/display z))
(defn case-match-ignore [x]
(case* x
#erl[_ y _] y))
;; First and third don't have to be equal
(let* [2 (case-match-ignore #erl[1 2 3])])
(defn case-match [x]
(case* x
#erl[a y a] y))
;; First and third don't have to be equal
(let* [2 (case-match #erl[1 2 1])])
软件主页:http://try.clojerl.online/