Frage

ein einfaches Programm, wie die folgenden gegeben, wie würden Sie:

  1. kompilieren sie als separate Bilddatei durch die Implementierung geladen werden, und welche Befehlszeilenargumente würden Sie es laden benutzen?

  2. ü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).
    
  3. 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)
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top