2011-01-21 14 views
5

¿Alguien sabe cómo (o si) puede usar ABCL para compilar el código Lisp en archivos .class y crear un método principal para que todo pueda empaquetarse en un archivo .jar y ejecutarse?Compilación ABCL y primitivas

Además, ¿alguien sabe cómo acceder a los primitivos tipos de Java desde código ABCL?

Respuesta

0

Si se buscan más paquetes en torno a una solución, ABCL tiene la capacidad de cargar definiciones ASDF a partir de un URI que el cargador de clases comprenda. El ASDF-INSTALL es cargado por este mecanismo (use el objetivo de compilación Ant 'abcl.contrib'), pero como un ejemplo simple, el siguiente código cargará dinámicamente a trivial test of ASDF loading via 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!" 

Se puede estudiar ese frasco para envases, pero básicamente sólo implica la creación de una definición ASDF, entonces simplemente se empaquete como JAR. Tenga en cuenta que el JAR solo contiene el origen Lisp que se compila automáticamente a través de la implementación de ASDF2 en un directorio local a través del mecanismo OUTPUT-TRANSLATION-LOCATION. Cualquier archivo de clase Java en el JAR se ignora actualmente. Si bien los archivos de la clase Java deben ser "independientes de la plataforma", existen suficientes implementaciones de JVM (Java 5 v Java 6) que tiene sentido compilar Lisp según la implementación de ABCL. Ciertamente existe la posibilidad de cargar un FASL de ABCL a través del URI, así que la implementación del ASDF actual probablemente podría modificarse si alguien tiene un caso de uso para nunca compilar en la carga inicial de ASDF.

Cuestiones relacionadas