Common-Lisp / Java互操作性有哪些可行的方法?

时间:2014-01-20 15:40:56

标签: java java-native-interface interop common-lisp ffi

所以......试图使用预先存在的轮子,而不是每次都重新发明自己的轮子,我一直在尝试使用[特定的Java库]来获得一个像样的Common Lisp环境。我的ABCL冒险实际上进展得相当顺利,最终我能够让ABCL很好地与[它]交谈。当然我想要的不仅仅是那个,我想要在[它]和我的半轮,chemicl,一个cheminformatics包之间的互操作性,我开始用Common Lisp编写。这是火车开始下降的地方。

ABCL和cxml-stp

前段时间,在早些时候,为了获得一些使用ABCL的化学/生物信息学(https://github.com/slyrus/cl-bio)的尝试,我注意到plexippus-xpath无法加载到ABCL中。这是固定的,所以我被鼓励,事情可能适用于ABCL。但是,cxml-stp似乎打破了ABCL。

希望这是一个可修复的错误,ABCL的某些未来版本将与cxml-stp一起使用。

与此同时......

其他CL和Java

所以,我想我会尝试其他一些方法来获得Java和Common Lisp实现。我知道,你在想“为什么这个家伙不会使用clojure?毕竟,这就是clojure的设计目的!”嗯,这是一个很好的问题。我确实使用clojure进行了一些早期的[这个Java库]探索,虽然java集成通常运行良好,但我有一堆现有的Common Lisp代码我想使用它,至少在当时看起来像所有的clojure包装器,在丑陋的Java库周围都有薄包装器。我已经逐渐了解并喜欢很多Common Lisp库,其中很多都可以在QuickLisp中使用,我希望能够使用它们(比如cxml-stp,plexippus-xpath,opticl等... )。

1 个答案:

答案 0 :(得分:11)

Clozure Common-Lisp(CCL)五年来,已经发布了一个完全移植的JFLI发行版(JFLI以前依赖于LispWorks FFI)作为"示例的标准组件"提供CCL源代码分发。 JFLI(来自Clojure的创建者Rich Hickey)使用过程中的模型,并且可能至少比你可能从Hickey的下一次尝试使用的模型中放置的任何东西都要高出一个数量级,更广泛兼容的基于套接字的解决方案,他将其命名为FOIL。

请查看以下URL以浏览Clozure开发主干中当前存在的当前JFLI源代码:

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

Rich Hickey介绍了JFLI,并总结了他所采用的方法 (代替CCL的FFI,他明显参考了LW-FFI):

  

我的目标是提供全面,安全,动态和Lisp-y访问   Java和Java库就像它们是Lisp库一样,用于Lisp程序,   即重点是在Lisp而不是Java中工作。   我采用的方法是使用JNI在Lisp进程中嵌入JVM实例。一世   能够使用LispWorks'拥有FLI而没有C(或Java!*)代码   是对LW FLI的致敬。在JNI层之上(基本上是一个包装器   围绕整个JNI API),我使用Java Reflection构建了这个用户级API。