Kompilieren Binaries mit Clozure Common Lisp
-
08-07-2019 - |
Frage
ein einfaches Programm, wie die folgenden gegeben, wie würden Sie:
-
kompilieren sie als separate Bilddatei durch die Implementierung geladen werden, und welche Befehlszeilenargumente würden Sie es laden benutzen?
-
übersetzt es als eigenständiges binär, die geladen und ausgeführt werden können wie es ist.
Hinweis: Ich habe versucht, den Zusatz ": prepend-Kernel t". Beim Sichern der Anwendung nur die Folge Fehler ausgelöst haben
Error: value NIL is not of the expected type REAL. While executing: CCL::<-2, in process Initial(0).
-
Wie würden Sie die Begrüßungsmeldung unterdrücken?
Das Programm
(defun main () (format t "This is the program.")0)
Bearbeiten
Hass Teil meiner eigenen Frage zu beantworten, aber ich fand es nicht weniger.
Nach dem Funktionstyp geladen Folgendes wurde es zu kompilieren:
(ccl:save-application "app")
Dies erzeugt eine Bilddatei. Um es zu laden, indem es auf die Umsetzung Art vorbei (Anmerkung: die ‚CCL‘ binär in meinem Systempfad ist);
ccl -I app
Um eine Top-Level-Funktion übergibt als Parameter ausführen
ccl -I app --eval (main)
Lösung
Sehen Sie die Clozure Common Lisp-Dokumentation unter Speichern von Anwendungen
Übersetzen und Laden Lisp-Dateien
Sie können kompilieren eine Datei mit dem Namen /foo/bar.lisp
durch den Aufruf
(compile-file "/foo/bar.lisp")
Dies wird eine fasl (FASt Load) Datei erstellen, die nativen Code enthält.
Sie können die kompilierte Datei laden, die fasl Datei, mit der Funktion LOAD
. LOAD
und COMPILE-FILE
sind Standard Common Lisp-Funktionen.
Erstellen von Anwendungen
Einige Definitionen:
- CCL Kernel . Der Teil des CCL, die wie Speicherverwaltung Low-Level-Runtimes Dienste bietet
- Bild : eine gespeicherte Dump des Lisp Haufen
- Anwendung : CCL-Kernel + Bild. Dies kann in einer Datei sein.
Sie können eine Anwendung speichern, indem eine CCL spezifische Funktion aufrufen:
(save-application "/foo/bar-image" :toplevel-function #'main)
Das wird ein Bild speichern, dass Sie den CCL-Kernel von einem Kommando-Shell ausgeführt werden können mit:
ccl -I /foo/bar-image
eine ausführbare Datei zu speichern, die die Kernel von Lisp verwendet dazu gehören:
(save-application "/foo/bar-app"
:toplevel-function #'main
:prepend-kernel t)
können Sie rufen diese ausführbare Datei wie gewohnt mit /foo/bar-app
von einem Kommando-Shell.
In Clozure Common Lisp können Sie überprüfen,
*command-line-argument-list*
für die Liste der vorgesehenen Befehlszeilenargumente.