Ist es besser, das defpackage beim Erstellen von Paketen in eine separate Datei zu legen?

8

Das folgende Beispiel wird in Paul Grahams ANSI Common Lisp als ein Beispiel für die Kapselung gegeben:

%Vor%

Aber in Peter Seibels praktischen gemeinsamen Lisp, Link hier , sagt er:

  

Da Pakete vom Leser verwendet werden, muss ein Paket definiert werden   bevor Sie eine Datei laden oder kompilieren können, die ein IN-Paket enthält   Ausdruck, der zu diesem Paket wechselt. Pakete müssen ebenfalls definiert werden   bevor andere DEFPACKAGE-Formulare auf sie verweisen können ...   Der beste erste Schritt, um sicherzustellen, dass Pakete existieren, wenn sie es brauchen   Um alle Ihre DEPPACKAGE in Dateien getrennt von dem Code zu setzen   muss in diesen Paketen gelesen werden

Er empfiehlt daher, für jedes Paket zwei Dateien zu erstellen, eine für das Defpackage und eine für den Code. Die Dateien, die defpackages enthalten, sollten mit (im Paket "COMMON-LISP-USER") beginnen.

Für mich scheint es, als würde das defpackage in die gleiche Datei gestellt, bevor das In-Package und der Code eine gute Möglichkeit darstellen, sicherzustellen, dass das Paket vor der Verwendung definiert wird. So scheint die erste Methode, alles in einer Datei zu sammeln, einfacher. Gibt es Probleme bei der Verwendung dieser Methode für die Paketerstellung?

    
snowape 07.12.2011, 13:26
quelle

3 Antworten

8

Ich denke, dass die Verwendung einer separaten Datei für defpackage eine gute Gewohnheit ist weil:

  • Sie "verschmutzen" Ihre Dateien nicht mit defpackage .
  • Es macht es einfacher, die exportierten / schattierten / ... Symbole zu finden Sie müssen nur auf package.lisp schauen.
  • Sie müssen sich bei der Verwendung von ASDF nicht um die Reihenfolge kümmern.

    %Vor%
  • Peter Seibel sagt es;)

BEARBEITEN: Ich habe vergessen, quickproject zu erwähnen, was die Erstellung von neue CL-Projekte.

%Vor%

Dieser Befehl erstellt ein Verzeichnis " ~/src/lisp/my-wonderful-project/ " und die folgenden Dateien:

  • package.lisp
  • my-wonderful-project.asd (filled)
  • my-wonderful-project.lisp
  • README.txt

Und deshalb denke ich, dass es gut ist, die gleiche Konvention zu verwenden.

    
Daimrod 07.12.2011, 15:29
quelle
1

Ich neige dazu, mehrere Quellcodedateien, eine einzelne "packages.lisp" -Datei und eine einzelne "project.asd" -Systemdefinitionsdatei für die meisten meiner Projekte zu verwenden. Wenn das Projekt mehrere Pakete benötigt, werden diese alle in "packages.lisp" definiert, wobei die relevanten Exporte exportiert werden.

    
Vatine 07.12.2011 18:02
quelle
0

Es gibt einen Grund dafür, DEFPACKAGE in eine eigene Datei zu schreiben: Wenn Sie ein großes Paket haben, dann könnten Sie mehrere Gruppen verwandter Funktionen haben, und Sie könnten separate Quelldateien pro Funktionsgruppe haben wollen. Dann hätten alle Quelldateien ihr eigenes IN-PACKAGE an der Spitze, aber sie würden alle das externe DEFPACKAGE "teilen". Solange Sie die DEFPACKAGE zuerst laden, ist es egal, in welcher Reihenfolge Sie die anderen Quelldateien laden.

Ein Beispiel, an dem ich gerade arbeite, enthält mehrere Klassen im Paket, und die Quelldateien sind nach Klassen aufgeteilt, wobei jede eine Klassendefinition und die zugehörigen generischen Funktions- und Methodendefinitionen enthält.

    
triac 02.12.2014 19:57
quelle

Tags und Links