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


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

ABCL和cxml-stp

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

希望这是一个可修复的bug,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等... )。


1636
2018-01-20 15:40


起源



答案:


Clozure Common-Lisp(CCL)已有五年的历史,它已经发布了JFLI(JFLI以前依赖于LispWorks FFI)的完全移植分发,作为CCL源代码分发提供的“示例”的标准组件。 JFLI(由Rich Hickey,Clojure的创建者)使用进程内模型,并且可能至少比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。


11
2018-01-20 15:52



一些更新的信息: jfli.sourceforge.net - Roy Truelove
对于FOIL也是如此: foil.sourceforge.net - Roy Truelove


答案:


Clozure Common-Lisp(CCL)已有五年的历史,它已经发布了JFLI(JFLI以前依赖于LispWorks FFI)的完全移植分发,作为CCL源代码分发提供的“示例”的标准组件。 JFLI(由Rich Hickey,Clojure的创建者)使用进程内模型,并且可能至少比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。


11
2018-01-20 15:52



一些更新的信息: jfli.sourceforge.net - Roy Truelove
对于FOIL也是如此: foil.sourceforge.net - Roy Truelove