この記事は、
Clojure Advent Calendar 2011の記事(9日目)です。
ClojureCLRとはなにか?
ClojureCLRは、David Miller(
@dmiller2718)さんがMicrosoft .NET Framework向けにポートしたClojure環境です。
あまり広報活動をしておらず、その動向があまり知られていないClojure環境でもあります。
2007年のClojure登場から遅れること1年、2008年秋から開発をはじめ、現在一段落ついたこともあり、今年10月のClojureの祭典
Clojure/Conj 直前に公式ブログを開設して
アンケートをおこなった結果をもとに、知名度向上やを開発コミュニティーの結成を目指しています。
一緒に個人のブログ(
Rational Approximation)も始めていて、初回の記事はClojureCLRの創世記となっています。
この記事では、概観のみ説明でお茶を濁したいと思います。(時間がなかった。。。)
入門記事については、C#/.NET開発者のRob Rowe(
@rippinrob)さんによる
ClojureCLRの連載がタイミングよく
My Clojure Adventureで始まっていますのでこちらをよろしくお願いします。
リソース
現在の状況
githubの
コミットヒストリーや
タグを眺めると、Clojureの開発リポジトリを追う形で修正を行なっており、一ヶ月以内には反映するようなペースでJVM版の差分を取り込む形で開発が進んでいます。
現在のJVM本家と同じくリリース版は1.3.0、開発版は1.4.0のalpha2版が最新となっております。
ソースからは.net Framework 3.5と4.0向けのDebug/Releseビルドが可能です。
バイナリは現在リリース版の1.3.0までで、Debugビルドのみ用意されてますが、自前でビルドして試してみたところReleaseビルドとパフォーマンスの差はあまり無いようです。
Monoとの互換性
開発者が少ないこともあり、Monoの互換性まで手が回らない状況で実装を行なっているため、REPLのコンソール操作とコンパイラがまともに動作しない状況ですが、cljファイルやコンパイルして出来たexeとdllの実行などは行うことができます。
また、
利用者アンケートの結果では開発者にも(マインド)ユーザーにも優先度が低いと判断されていますので、Monoで使いたいユーザーはパッチを作るのを前提としたほうが(誰かが)幸せになれます。
※アンケートの回答した中では実質ユーザは2人でした。。。
ちなみに、Boo、IronPython、F#、Phalanger(PHPコンパイラ)などは、Monoとの互換性も考慮して開発されています。
REPLの起動速度
REPLの起動は同じCPUでJVMを使った場合の2倍程度かかります。
但し、.NET Framework環境ではAOT(ngen)でネイティブバイナリ化が可能ですので、その場合にはJVM環境の1/2程度の時間で起動します。Mono環境でも同じ程度の時間で実行できました。
Windows 64bitではngenコマンドが、
%SystemRoot%\Microsoft.NET\Framework\<バージョン (v3.5, v4.0.30319)>\ngen.exe
%SystemRoot%\Microsoft.NET\Framework64\<バージョン (v3.5, v4.0.30319)>\ngen.exe
と用意されており、「Framework64」のngen.exeを実行する必要性があるので注意しましょう。
REPLの起動については、「Clojure.dll」と「clojure.core.clj.dll」のみネイティブバイナリにしても起動が高速になります。
Mono環境では、「mono-sgen --aot」など、GCに世代別GCを使いAOTを行った場合に高速に起動出来ました。
バックエンドにLLVMを使うための「--llvm」オプションを使った場合は、REPLの起動が遅くなっていましたので、いまのところ相性は良くないようです。
ちなみに、AOT実行で起動やスクリプトの読み込みまで早くなりますが、JITより記述したプログラム部分の実行が早くなる訳ではありません。
まとめ
JVMに
比べて、JITの実行速度最適化が進んだ実装がない
共通言語基盤(CLI)ではありますが、
無償のAOT環境が用意されている点などREPL向けの環境でもありますので、
C#やVSの環境が苦手としている分野(知らないけど)でClojureCLRにも陽の目を浴びるチャンスがあるかもしれません。
leinningenなどのビルドツールなどが用意されていないなど、まだ実用的な環境を用意するには不備も多いですが、
頭の片隅にでもClojureCLRというものがあるということ、覚えていただければ幸いです。
以上、駄文にお付き合い下さいありがとうございました。