2014-01-20 5 views
11

そういうわけで、私は毎回自分自身を改革するのではなく、既存の車輪を使うために、[特定のJavaのライブラリ]でうまく動作するまともなCommon Lisp環境を手に入れようとしていました。私のABCLの冒険は実際にかなりうまく行きました。そして、結局、ABCLがうまく話すことができました。もちろん、私はそれ以上のものを望んでいました。私はCommon Lispで書いたケミカルなパッケージである、私と半円形ホイールchemiclとの相互運用性が必要でした。これは列車が軌道から崩れ始める場所です。しばらく前にCommon-Lisp/Javaの相互運用性にはどのようなアプローチがありますか?

ABCLとCXML-STP

、ABCLでの作業私のCHEM /バイオインフォマティクスの一部(https://github.com/slyrus/cl-bio)のものを得るために、以前、中止された試みで、私はオオカバマダラ-xpathができなかったことに気づきましたABCLにロードされます。これは修正されたので、ABCLで動作することが奨励されました。しかし、cxml-stpはABCLを破るようです。

これは修正可能なバグであり、将来のバージョンのABCLはcxml-stpで動作することを望みます。一方

...

その他のCLおよびJava

だから、私は、JavaとCommon Lispの実装は素晴らしいプレーする得るためにいくつかの他の方法を試してみた考え出し。私は知っている、あなたは思っている "なぜ、お前は単にクロージャーを使うのではない?結局のところ、それはクロージャーがデザインしたものだよ!まあ、それは良い質問です。私は[このJavaライブラリ]を使ったいくつかの初期の調査でclojureを使用しましたが、Javaの統合は一般的にはうまくいきますが、私は使用したいCommon Lispコードをたくさん持っています。すべてのclojureラッパーは、醜いJavaライブラリーの周りに薄いラッパーを配置します。私は、多くのCommon Lispライブラリを知り尽くしてきており、その多くはQuickLispでうまく利用できます。これらのもの(cxml-stp、plexippus-xpath、opticlなど)を使用できるようにしたいと思います。 )。

答えて

11

Clozure Common-Lisp(CCL)は、CCLソースディストリビューションで提供される "examples"の標準コンポーネントとして、JFLI(以前はLispWorks FFIに依存していたJFLI)を完全に移植して出荷しました。 。 JFLI(Clojureの作成者、Rich Hickey)は、インプロセスモデルを使用しています.Hickeyの次の試みで採用されているモデルよりも、少なくともより大きなパフォーマンスを発揮します。ソケットベース彼はFOILという名前の解決策をとった。

は、現在Clozure開発トランクに存在するように、現在のJFLIのソースコードを閲覧するには、次のURLを見てください:

http://trac.clozure.com/ccl/browser/trunk/source/examples/jfli

リッチヒッキーは、彼が取ったアプローチの次の要約でJFLIを導入しました (彼は明らかにLW-FFIを参照する代替CCLのFFI):

私の目標は のJavaおよびJavaに、総合的な安全、ダイナミックとLisp-yのアクセスを提供することでしたライブラリをLispライブラリであるかのように、Lispプログラムで使用するためには、 つまり、JavaではなくLispでの作業に重点を置いています。 私が取ったアプローチは、JNIを使​​ってLispプロセスにJVMインスタンスを埋め込むことでした。 I は、Lispの独自のFLIとC(またはJava!*)コードを使用してこれを行うことができました。 はLW FLIへの賛辞です。 JNIレイヤー(基本的にJNI API全体のラッパー )の上に、Java Reflectionを使用してこのユーザーレベルAPIを構築しました。

+0

ここにいくつかの最新情報が掲載されています:http://jfli.sourceforge.net/ –

+0

また、FOILについても:http://foil.sourceforge.net/ –