ABCL を使用して Lisp コードを .class ファイルにコンパイルし、main メソッドを作成してすべてを .jar ファイルにパッケージ化して実行できるようにする方法 (または場合) を知っている人はいますか?
また、ABCL コードからプリミティブ Java 型にアクセスする方法を知っている人はいますか?
ABCL を使用して Lisp コードを .class ファイルにコンパイルし、main メソッドを作成してすべてを .jar ファイルにパッケージ化して実行できるようにする方法 (または場合) を知っている人はいますか?
また、ABCL コードからプリミティブ Java 型にアクセスする方法を知っている人はいますか?
ソリューションをさらにパッケージ化する必要がある場合、ABCL には、クラス ローダーが理解できる URI から ASDF 定義をロードする機能があります。ASDF-INSTALL はこのメカニズム (Ant ビルド ターゲット 'abcl.contrib' を使用) によってロードされますが、簡単な例として、次のコードはURI を介して ASDF ロードの簡単なテストを動的にロードします。
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には、ASDF2実装を介してOUTPUT-TRANSLATION-LOCATIONメカニズムを介してローカルディレクトリに自動的にコンパイルされるLispソースのみが含まれていることに注意してください。現在、JAR 内の Java クラス ファイルはすべて無視されます。Java クラス ファイルは「プラットフォームに依存しない」べきですが、ABCL 実装ごとに Lisp をコンパイルするのに十分な JVM 実装 (qv. Java 5 v Java 6) があります。確かに、URI を介して ABCL FASL をロードする機能もあるため、最初の ASDF ロードでコンパイルしないというユースケースがある場合、現在の ASDF 実装はおそらく変更される可能性があります。