Каковы возможные подходы к совместной работе с интерфейсом Lisp/Java?

Итак... пытаясь использовать существующие диски, а не изобретать свои собственные на каждом шагу, я пытался создать приличную среду Common Lisp, работающую с [конкретной библиотекой Java]. Мои приключения ABCL на самом деле прошли достаточно хорошо, и я смог, в конечном итоге, получить ABCL красиво и приятно. Конечно, я хотел больше, чем просто, я хотел, чтобы интероперабельность между ним и моим полукруглым колесом, chemicl, пакетом cheminformatics, который я начал писать в Common Lisp. Здесь поезд начал падать с трасс.

ABCL и cxml-stp

A назад, в более ранней, прерванной попытке получить некоторые из моих химических/биоинформатики (https://github.com/slyrus/cl-bio), работающих с ABCL, я заметил, что 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

Clozure Common- Lisp (CCL) в течение пяти лет поставлялся с полностью портированным распределением JFLI (ранее JFLI зависел от LispWorks FFI) в качестве стандартного компонента "примеров", предоставляемых источником CCL распределение. JFLI (автор Rich Hickey, создатель Clojure) использует модель in-process и, по всей вероятности, будет по крайней мере на порядок более высокой, чем все, что вы могли бы объединить с моделью, используемой следующей попыткой Хикки, более широко совместимым сокетом на основе решения он назвал FOIL.

Посмотрите на следующий URL-адрес, чтобы просмотреть текущий исходный код JFLI, как он существует в сущности разработки Clozure:

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

Рич Хики представил JFLI со следующим резюме подхода, который он принял (Замените CCL FFI, где он ссылается на LW-FFI):

Моя цель состояла в обеспечении всестороннего, безопасного, динамического и Lisp -y доступа к Java и Java, как если бы они были библиотеками Lisp, для использования в программах Lispт.е. с акцентом на работу в Lisp, а не на Java. Подход, который я принял, заключался в том, чтобы внедрить JVM-экземпляр в процесс Lisp с использованием JNI. я смог сделать это, используя собственный FLI файл LispWorks и код C (или Java! *), который является данью LW FLI. Наверху слоя JNI (по существу, обертка вокруг всего API JNI), я построил этот API-интерфейс пользователя с использованием Java Reflection.