所以......试图使用预先存在的轮子,而不是每次都重新发明自己的轮子,我一直在尝试使用[特定的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等... )。
答案 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。