Clojureをネイティブにサクサク使えるbabashkaとlumoが便利

時々あるのだけど、自分のなかで関数型言語熱が再燃中。昔ScalaOCamlでプログラムしていた時期を思い出して、ふとClojureを書きたくなった。ただ、あまりJVMは使いたくない。JVMを使わないでClojureを使う方法はないかと模索していたら、便利なツールを2つ発見。

github.com

github.com

この2つは、それぞれClojure、ClojureScriptをJVMなしでも開発できるようにしたツールで、babashkaはGraalVM、lumoはGoogle Closure Compilerの恩恵によってネイティブ化を実現しているらしい。

両者ともにJVMいらずでClojureが使えるのでとても便利で、例えばbabashkaはその名の通りbashのようにスクリプトを書く際に使える。JVMの全てのライブラリが使えるわけではないものの、コアな機能はそのままクロスプラットフォームに使えるというところが、GraalVMのすごさを感じる。起動時間も早いのも好感が持てる。lumoも同様で、こちらはClojureScript開発にそのまま使える。

両者とも、Win/Mac/Linux用のバイナリが配布されているので、一般的なPCではそのまますぐ使える。ただ、どちらもARM版については提供されておらず、特にARM32ではビルドするのが困難な様子。Issueを見るにできる可能性はあるものの、まだAndroidRaspberry Piですぐ使うことはできなさそう。

ところで、ここからは蛇足だけれど、最近はClojure-likeな言語も増えてきているようで、英語だけど便利なまとめ記事もあったりする。

github.com

github.com

個人的にはCarpが早く正式版になってくれないかなと期待していて、GCなしでするLispとしてとても興味深い。簡単にC/C++連携できるし、Clojure風の記法で、個人的にはとても読みやすい。

github.com

SwiftやNimのようにARCといった負荷の少ないGCで動かせる言語も出てきているけれど、Rustが登場して以来、GCなしでメモリを自己管理しつつ安全に開発できる言語が、今後選択肢が増えていくのかなとちょっと期待。Scalaに対してのKotlinのように、Rustの簡単版な言語があればいいのになぁと思ったり。