java - Common-Lisp/Java 互操作性的可能方法是什么?

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

所以...为了尝试使用已有的轮子,而不是每次都重新发明自己的轮子,我一直在尝试获得一个与 [特定 Java 库] 一起工作的体面的 Common Lisp 环境。我的 ABCL 冒险实际上进行得相当顺利,最终我能够让 ABCL 与 [它] 很好地交谈。当然我想要的不止于此,我想要 [it] 和我的半圆轮 chemicl 之间的互操作性,这是我开始用 Common Lisp 编写的一个化学信息学包。这是火车开始脱轨的地方。

ABCL 和 cxml-stp

前阵子,在早些时候尝试让我的一些化学/生物信息学 ( https://github.com/slyrus/cl-bio) 与 ABCL 一起工作时,我注意到 plexippus-xpath 无法加载到 ABCL 中。这是固定的,所以我很高兴事情可能与 ABCL 一起工作。然而,cxml-stp 似乎破坏了 ABCL。

希望这是一个可修复的错误,ABCL 的某些 future 版本将与 cxml-stp 一起工作。

同时...

其他 CL 和 Java

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

最佳答案

五年来,Clozure Common-Lisp (CCL) 随附了完全移植的 JFLI 发行版(JFLI 以前依赖于 LispWorks FFI)作为 CCL 源代码发行版提供的“示例”的标准组件。 JFLI(由 Clojure 的创建者 Rich Hickey 设计)使用进程内模型,并且可能比你从 Hickey 的下一次尝试所采用的模型(一种更广泛兼容的基于套接字的模型)中组合起来的任何模型的性能至少高出一个数量级他将解决方案命名为 FOIL。

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

https://github.com/Clozure/ccl/tree/master/examples/jfli

Rich Hickey 介绍了 JFLI,并总结了他所采用的方法 (替换 CCL 的 FFI,他显然引用了 LW-FFI):

My objective was to provide comprehensive, safe, dynamic and Lisp-y access to Java and Java libraries as if they were Lisp libraries, for use in Lisp programs, i.e. with an emphasis on working in Lisp rather than in Java. The approach I took was to embed a JVM instance in the Lisp process using JNI. I was able to do this using LispWorks' own FLI and no C (or Java! *) code, which is a tribute to the LW FLI. On top of the JNI layer (essentially a wrapper around the entire JNI API), I built this user-level API using Java Reflection.

关于java - Common-Lisp/Java 互操作性的可能方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21238104/

相关文章:

java - Eclipse 导出文件 jar 不包含文件夹

java - 需要创建5个形状

java - 字符串池 - 字符串对象 - 垃圾收集

java - Android临时保存位图图像

java.lang.NoClassDefFoundError :

windows-runtime - C4827 警告覆盖 C++/CX Metro 类中的 ToString

java - 如何在 JNI 中访问从 C++ 返回 java.lang.String 的 Java 方法的返回值?

android mupdf libmupdf.so 运行时错误 "No implementation found for native openFile"

c# - 切片器连接不显示可透视的更改后数据源

c++ - 有什么理由反对在 QueryInterface() 实现中直接调用 AddRef() 吗?