Компиляция ABCL и примитивы

Кто-нибудь знает, как (или можно ли) использовать ABCL для компиляции кода Lisp в файлы .class и создания основного метода, чтобы все это можно было упаковать в файл .jar и запустить?

Кроме того, кто-нибудь знает, как получить доступ к примитивным типам Java из кода ABCL?


person compman    schedule 21.01.2011    source источник


Ответы (2)


Дидье Вернер поделился своим опытом вот с такой упаковкой вопрос на днях.

person easyE    schedule 26.01.2011

Если кто-то ищет дополнительную упаковку для решения, ABCL имеет возможность загружать определения ASDF из URI, который понимает загрузчик классов. ASDF-INSTALL загружается с помощью этого механизма (используйте цель сборки Ant 'abcl.contrib'), но в качестве простого примера следующий код будет динамически загружать тривиальный тест загрузки ASDF через URI.

CL-USER> (pushnew #p"jar:http://abcl-dynamic-install.googlecode.com/files/asdf-uri-test.jar!/asdf-uri-test/" asdf:*central-registry*)
(#P"jar:http://abcl-dynamic-install.googlecode.com/files/asdf-uri-test.jar!/asdf-uri-test/" #P"jar:file:/Users/evenson/work/abcl/dist/abcl-contrib.jar!/asdf-install/" (MERGE-PATHNAMES ".asdf-install-dir/systems/" (USER-HOMEDIR-PATHNAME)) (MERGE-PATHNAMES "work/lsw/" (USER-HOMEDIR-PATHNAME)))
CL-USER> (asdf:load-system :test)
; Loading system definition from jar:http://abcl-dynamic-install.googlecode.com/files/asdf-uri-test.jar!/asdf-uri-test/test.asd into #<PACKAGE "ASDF0">
; Registering #<SYSTEM :TEST> as TEST
; Compiling jar:http://abcl-dynamic-install.googlecode.com/files/asdf-uri-test.jar!/asdf-uri-test/test.lisp ...
; (DEFUN TEST ...)
; Wrote /Users/evenson/.cache/common-lisp/abcl-0.25.0-dev-fasl37-macosx-java/files/asdf-uri-test.jar/asdf-uri-test/ASDF-TMP-test.abcl (0.163 seconds)
T
CL-USER> (test)
"The test function loaded!"

Вы можете изучить этот jar для упаковки, но в основном это просто включает создание определения ASDF, а затем просто его упаковку в виде JAR. Обратите внимание, что JAR содержит только исходный код Lisp, который автоматически компилируется через реализацию ASDF2 в локальный каталог с помощью механизма OUTPUT-TRANSLATION-LOCATION. Любые файлы классов Java в JAR в настоящее время игнорируются. Хотя файлы классов Java должны быть «независимыми от платформы», существует достаточно реализаций JVM (см. Java 5 против Java 6), поэтому имеет смысл компилировать Lisp для каждой реализации ABCL. Конечно, есть возможность загрузить ABCL FASL через URI, поэтому текущая реализация ASDF, вероятно, может быть изменена, если у кого-то есть прецедент, который никогда не компилирует начальную загрузку ASDF.

person easyE    schedule 26.01.2011