Clojerl
https://gyazo.com/d30330220be98c2ddb1afec53571589b
clojerl/clojerl: Clojure for the Erlang VM
ErlangErlang.iconで動くClojureClojure.icon
ネットワークサーバーを立てる時はこれが一番便利
/ne-sachirou/ElixirからClojerlへ移りたい
インストール
clojerl/rebar3_clojerl: rebar3 Clojerl compiler plugin
開発環境
Clojure.iconの道具がだいたい使えるつもりでいる
Clojerl.iconのREPLとClojure.iconのREPLと2つ立ち上げてなきゃいけなさそう
Clojerl.iconのREPLにJVMをぶら下げておけばよさそう→仕組みを作る
project管理
GitHub - erlang/rebar3: Erlang build tool that makes it easy to compile and test Erlang applications and releases.
clojerl/rebar3_clojerl: rebar3 Clojerl compiler plugin
formatter
cljstyle
code:.cljstyle
{:files {:extensions #{"clj" "cljc" "clje" "cljs" "cljstyle" "edn"}
:ignore #{"_build"}}}
$ cljstyle fix
linter
cljstyle
$ cljstyle check
clj-kondo
$ cljstyle find | xargs -t clj-kondo --lint
test
editor
Emacs.iconで押し通すつもり
code:init.el
(add-to-list 'auto-mode-alist '("\\.clje\\'" . clojure-mode))
どこまでClojure.iconのlibraryが使えるか気になる
Erlang.iconのlibraryは使える
ElixirElixir.iconのlibraryはあんまり使えなさそう
useしなくていいlibraryは使えると思ふ
rebar3はmixの複雑なversion指定を読めない
よって ElixirElixir.iconの library は普通には使えない
Clojure.iconのlibraryをMaven (Clojars) から持ってくる仕組みはない
.cljc (Reader conditionals) に対応してるっぽい
Clojure - Reader Conditionals Guide
code:example.cljc
#?(:clj (Clojure expression)
:clje (Clojerl expression)
:cljr (Clojure CLR expression)
:cljs (ClojureScript expression)
:default (fallthrough expression))
rebar3の{git, "https://〜", 〜}バージョン書式で持ってこられる
forkして.cljcや.cljeを作れば使える
Clojerl.icon公式ではこうしている
Erlang.iconの呼び方
Clojerl から Erlang を呼ぶ: How to interoperate with Erlang and Clojerl - c4se記:さっちゃんですよ☆
:erlang.display/1を(erlang/display 〜)と普通に呼べる
(erlang/display.1 〜)とarityを指定できる
(#erl erlang/display 〜)とreader macroでErlang.iconの函数である事を指示できる
Erlang.iconに渡せるdata型
-42
整数はそのまま
-42.29e3
浮動小数点数はそのまま
:atom
Erlang.iconではatom又は'atom'。ElixirElixir.iconでは:atom
#erl"charlist"
Erlang.iconでは"charlist"。ElixirElixir.iconでは'charlist'
"binary"
Erlang.iconでは<<"binary">>。ElixirElixir.iconでは"binary"又は<<"binary">>
#erl(list list …)
Clojure.iconの list'(list list …)っぽい
Erlang.iconや ElixirElixir.iconでは[list, list, …]
#erl[tuple tuple …]
Clojure.iconの vector[vec vec …]っぽい
Erlang.iconや ElixirElixir.iconでは{tuple, tuple, …}
#erl{map map …}
Clojure.iconのmap{map map …}っぽい
Erlang.iconでは#{map => map, …}。Elixirでは%{map: map, …}又は%{:map => map, …}
ElixirElixir.iconの struct %AModule{key: value}は#erl{:__struct__ AModule :key value …}で作れる