2011-01-21 27 views
5

Qualcuno sa come (o se) è possibile utilizzare ABCL di compilare il codice Lisp per .class file e creare un metodo principale in modo che il tutto potrebbe essere confezionato in un file .jar ed eseguire?ABCL compilazione e primitive

Inoltre, qualcuno sa come accedere tipi primitivi Java dal codice ABCL?

risposta

0

Se uno è alla ricerca di ulteriori imballaggi in giro una soluzione, ABCL ha la possibilità di caricare le definizioni ASDF da un URI che il caricatore di classe capisce. L'ASDF-installazione è caricato da questo meccanismo (utilizzare la Formica build target 'abcl.contrib'), ma come un semplice esempio, il seguente codice caricare dinamicamente 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!" 

Puoi studiare quel vaso per il confezionamento, ma in fondo è solo comporta la creazione di una definizione di ASDF, poi semplicemente imballaggio come un JAR. Si noti che il JAR contiene solo l'origine Lisp che viene compilata automaticamente tramite l'implementazione ASDF2 in una directory locale tramite il meccanismo OUTPUT-TRANSLATION-LOCATION. Tutti i file di classe Java nel JAR sono attualmente ignorati. Anche se i file di classe Java dovrebbero essere "indipendente dalla piattaforma", ci sono abbastanza implementazioni JVM là fuori (vedi voce. Java 5 v Java 6) che ha senso per compilare il Lisp per implementazione ABCL. Esiste certamente la possibilità di caricare un ABL FASL tramite URI e quindi l'attuale implementazione di ASDF potrebbe probabilmente essere modificata se qualcuno ha un caso d'uso per non compilare mai il caricamento ASDF iniziale.