ABCL компиляция и примитивы - PullRequest
5 голосов
/ 22 января 2011

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

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

Ответы [ 2 ]

2 голосов
/ 26 января 2011

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

0 голосов
/ 26 января 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!"

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

...