ラベル CLR の投稿を表示しています。 すべての投稿を表示
ラベル CLR の投稿を表示しています。 すべての投稿を表示

2013年7月7日日曜日

ClojureCLR-1.5.0 スナップショット

ClojureCLR 1.5.0のスナップショットをビルドしました。

ClojureCLRをビルドするのにパッケージを用意するのには、libフォルダにDLRを追加するのではなく、nuget経由でパッケージを使うようですが
現時点では、.net4.0(Release版)のみビルド出来ました。


skydriveにファイルを上げましたのでリンクを張っておきます。

更新:Microsoft.Dynamic.dll, Microsoft.Scripting.dll, Microsoft.Scripting.Metadata.dllを追加しました。

2011年12月9日金曜日

ClojureCLRを知ろう

この記事は、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というものがあるということ、覚えていただければ幸いです。

以上、駄文にお付き合い下さいありがとうございました。

2010年2月14日日曜日

Clojure-CLR 1.1.0をVisual C# 2008 Express Edition SP1でビルドするのに用意したものをメモ

GitHubにClojure 1.1.0のCLR実装(ClojureCLR 1.1.0)が用意されているので、インストール手順を見ながらVisual C# 2008 Express Edition SP1で、ビルドしてみた。

準備
まずは、開発環境から、アセンブリとソースのディレクトリ構成まで整える。
開発環境
DL Visual C# 2008 Express Edition with SP1 もしくは、Visual Studio 2008 SP1
SP1について
http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/vs2008/sp1/
必要なアセンブリ(インストールするもの)
DL Microsoft .NET Framework 3.5 SP1 (Full packege版)
DL NUnit 2.5.2
必要なアセンブリ(配置するもの)
DL Rhino Mocks 3.5 - For .Net 3.5 (with Castle assemblies)
ビルドに必要なソースファイル
DL Clojure-CLR 1.1.0
DL Microsoft Dynamic Language Runtime Change Set 38141あたり

フォルダ構成
dev\
- richhickey-clojure-clr-ee572b9\ (名前を変えてもOK)
- DLR_Main\
- RhinoMocks\

・devフォルダにDynamic Language Runtimeと、Clojure-CLRをフォルダごと配置
・devフォルダにRhinoMocksフォルダを作成して、ファイルをコピー

プロジェクトのビルド
・richhickey-clojure-clr-ee572b9\ClojureフォルダのClojureCLR.slnというソリューションファイルをVisual Studioもしくは、Visual C#で開く。
・Runtimeが構成できないというポップアップウインドウを無視する。
・そのまま、ビルドからソリューションのビルドを実行する。
・ビルドが終わると、richhickey-clojure-clr-ee572b9\Clojure\Clojure.Main\bin\Debugフォルダ内に、コンパイラ(Clojure.Compile.exe)とREPL(Clojure.Main.exe)ほか関連ファイルが用意される。

ClojureCLRを実行する
Clojure.Main.exeを実行すれば、java -cp clojure.jar clojure.mainと同じようにREPL(対話型評価環境)が起動する。
・CLR環境では、CLASSPATHのかわりに環境変数clojure.load.pathが用意されている。
設定したパス内の*.clj.dllと*.cljをさがす。
参考:Running ClojureCLR

そのほか
・Simple.Console.exeの使い方→Running ClojureCLR
・CLR,C#の呼び出し→CLR Interop, Completing CLR interop
・CLRに合わせたclojure.coreの変更→Translating core.clj
・未実装の機能やclojure.contribについて→ToDo
やはりJava呼び出ししているところの書き換えが必要なようです。
Wikiは、進行状況に合わせて変更されている。
ビルドテストは、
(require '(clojure [test-clojure :as main]))
(main/run)
Testing clojure.test-clojure.data-structuresで、2エラーありました。
・Clojure.Source.dllやClojure.Tests.dllはなんだ?