Clojerlとは
ClojerlはClojureのerlangのバインディングです。
https://www.clojerl.org/
Erlangは安全で信頼性の高い、スケーラブルなシステムを構築するの言に適している言語です。そしてClojureと同様にイミュータブルで永続的なデータ構造を提供し、並行処理の機能を持ちます。
一方、Clojureが提供するものはLispそのものです。repl、これはプログラマーに対して魅力的な世界を提供します。そしてErlangと同様にイミュータブルで並行処理の機能を提供します。
インストール
私の環境はM1 Macですので、brewでerlangを含むelixirをインストールします。
brew update
brew install elixir
でもこれだけでは足りません。ビルドツールであるrebar3が必要です。
git clone https://github.com/erlang/rebar3.git
cd rebar3/
./bootstrap
同じディレクトリにrebar3
ができるので、これをパスが通るディレクトリに置きます。
次にclojerlをインストールします。
git clone https://github.com/jfacorro/clojerl
cd clojerl
make
clojerlの動かし方
動かし方は簡単です。
% make repl
===> Verifying dependencies...
===> Analyzing applications...
===> Compiling clojerl
===> Clojerl Compiling clojerl
===> Clojerl Compiling spec_alpha
===> Clojerl Compiling test_check
===> Clojerl Compiling core_specs_alpha
Clojure 0.9.0-2174.5b412b8
早速動かしてみる。
clje.user=> (+ 1 1)
2
clje.user=> (defn add [x y](+ x y))
#'clje.user/add
clje.user=> (add 1 2)
3
clje.user=> (let [x 3 y 2]
(println "x = " x ", y = " y)
(* x y)
)
x = 3 , y = 2
6
(let [n 1000000 iter 100
l (into () (repeat n "a"))
v (into [] (repeat n "a"))
]
(time (dotimes [_ iter](nth l (dec n) )))
(time (dotimes [_ iter](nth v (dec n) )))
)
"Elapsed time: 1680.684589 msecs"
"Elapsed time: 0.120343 msecs"
pureなClojureでは。。。
(let [n 1000000 iter 100
l (into () (repeat n "a"))
v (into [] (repeat n "a"))
]
(time (dotimes [_ iter](nth l (dec n) )))
(time (dotimes [_ iter](nth v (dec n) )))
)
"Elapsed time: 351.272542 msecs"
"Elapsed time: 0.128791 msecs"
ちょっと遅いかも知れません。
おわりに
それなりに使えるようですが、まだまだ未実装のものも多いようで今後に期待します。