Frage

1) Was ist die richtige Methode, um ein Bild in CCL zu erstellen? Oder was ist der genaue Unterschied zwischen:

(compile-file "foo.lisp") und (progn (load "foo.lisp") (save-application "foo"))?

2) Gibt es eine Möglichkeit, mehrere Bilder zu laden (Befehlszeile bevorzugt)?

War es hilfreich?

Lösung

Der Dateikompiler in gemeinsamen Lisp -Systemen erstellt eine Darstellung der ursprünglichen Quelle in einer Art Maschinensprache (je nach Zielprozessor) oder für eine virtuelle Maschine (z. B. in CLIP). Diese kompilierte Datei kann dann mit der Lastfunktion in ein laufendes Lisp -System geladen werden und erstellt die Definitionen der Quelle (Funktionen, Klassen, Variablen, ...) und führt einen anderen Code in der Datei aus.

Man kann Quelldateien direkt laden (auch mit der Funktionslast). Wenn der LiSP auch einen Compiler für Ladeformulare verwendet, beträgt der Vorteil des Datei Compiler:

  • Das Laden des kompilierten Codes sollte etwas schneller sein
  • Einige Fehlerprüfungen zur Kompilierungszeit
  • Möglicherweise aggressivere Zusammenstellung mit schnelleren Code zur Laufzeit
  • Code kann kleiner sein (abhängig)

Das Speichern eines Bildes ist unabhängig. Das Bild ist ein Speicherdepon von einem laufenden Lisp. Im Allgemeinen kann nicht jeder Staat je nach Lisp -System abgeladen werden. Kandidaten von Dingen, die nicht in ein Bild abgeladen werden können: Dateiverbindungen, Netzwerkverbindungen, Öffnen von Windows, ... Diese Dinge müssen also möglicherweise wieder geöffnet werden, wenn ein Bild gestartet wird.

Wenn Sie eine LiSP -Anwendung starten möchten, verfügt man über mehrere Optionen:

  • Laden Sie den gesamten Quellcode beim Start
  • Laden Sie den gesamten kompilierten Code beim Start
  • Laden Sie ein Bild mit allen Code enthalten

Letzteres ist wahrscheinlich am schnellsten. Für viele Zwecke ist das Laden des kompilierten Codes beim Start auch schnell genug, insbesondere wenn das Start nur noch später stattfindet.

Schauen wir uns Ihre Frage noch einmal an.

(compile-file "foo.lisp")

Kompiliert einfach eine einzelne Datei in eine kompilierte Datei (FASL -Datei, "schnell"). Der Effekt der Zusammenstellung ist auch, dass einige Informationen im Lisp -System aufgezeichnet wurden, die Definitionen der Datei sind jedoch nicht verfügbar. Sie müssen dann die kompilierte Datei laden.

(progn (load "foo.lisp") (save-application "foo"))

Oben lädt die Datei zuerst. Beachten Sie, dass ein Lisp -mit einem inkrementellen Compiler einige oder alle Aussagen in dieser Datei zusammenstellen kann (CCL und SBCL tun dies). Save-Application ist eine CCL-spezifische Funktion, die den vollständigen LISP-Status (minus Dateiverbindungen, ...) absetzt und eine Anwendung erstellt, die dann gestartet werden kann.

Wenn Sie Lisp-Anwendungen erstellen möchten, die wie andere Anwendungen beginnen, ist die Speicherung der Anwendung der richtige Weg.

Wenn mehrere Bilder geladen werden können, ist systemabhängig. In CCL können Sie nicht. Auf einer Lisp -Maschine kann man ein Basisbild laden und dann mehrere inkrementelle Bilder darüber hinaus.

Andere Tipps

compile-file Tut das, was es sagt: Es kompiliert eine Quelldatei in nativen Code und speichert das Ergebnis in einer anderen Datei. Dateien kompiliert mit compile-file kann mit dem geladen werden load Funktion. Die Kompilierung ist lediglich eine Optimierung, daher ist der Effekt dem Laden der Quelldatei sehr ähnlich.

Im Gegensatz dazu speichert ein Kernbildgeschäfte der vollständige Zustand der Lisp -Umgebung, einschließlich des Lisp -Heaps (mit allen geladenen Code und Daten) sowie des Status der Ausführung, weshalb der Versuch, mehrere Kernbilder in eine einzelne LISP -Instanz zu laden, keinen Sinn ergibt. Wie im Handbuch beschrieben, können Sie Speichern Sie ein Kernbild durch die Nutzung (ccl:save-application "image_name") wo image_name ist der Name der Bilddatei, die Sie erstellen möchten. Ein Kernbild kann nur geladen werden, indem eine neue Clozure -CL -Instanz gestartet und die Bilddatei mit der Lieferung geliefert wird -I Befehlszeilenoption.

Wenn Sie eine Software schreiben, die aus mehreren Quelldateien besteht, möchten Sie im Allgemeinen nicht manuell kompilieren und laden. Betrachten Sie stattdessen Erstellen einer Systemdefinition Datei und Laden Sie Ihre Software mit ASDF.

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