Quicklisp und mehr: Neues bei Common Lisp

Seite 3: Quicklisp

Inhaltsverzeichnis

Mit Quicklisp existiert seit 2010 eine gut funktionierende Paketverwaltung für Common Lisp. Sie folgt früheren Versuchen wie ASDF-INSTALL, die damit obsolet wurden. (ASDF-INSTALL ist nicht zu verwechseln mit ASDF. Mit ASDF werden Systeme definiert, während ASDF-INSTALL zum Installieren von Systemen dient(e).) Ein manuelles Suchen und Installieren von Software ist nur noch selten nötig. Zurzeit bietet Quicklisp knapp 2200 ASDF-Systeme zum Installieren an; das entspricht etwa 700 verschiedenen Bibliotheken. Entwickelt und betrieben wird Quicklisp von Zach Beane, es erfolgen Updates fast regelmäßig zum Anfang eines jeden Monats. Die Informationen zu Änderungen, welche Pakete neu hinzugekommen, welche in neuer Version verfügbar sind sowie welche entfernt wurden, findet man im Quicklisp-Blog.

Um Quicklisp zu installieren, ist nur die Datei quicklisp.lisp herunterzuladen, zum Beispiel ins Heimatverzeichnis, und mit (load "~/quicklisp.lisp") zu starten. Daraufhin erfolgen Anweisungen zu Installation und Hilfe, wobei zum Einrichten nur einmalig (quicklisp-quickstart:install) aufzurufen ist. Ist Quicklisp erst einmal installiert, reicht nach dem Starten der Lisp-Implementierung der Aufruf

(load "~/quicklisp/setup.lisp")

Quicklisp verfügt über genug Informationen über die jeweils verwendete Implementierung, um sich selbst in die jeweilige Initialisierungsdatei zu installieren und so den letzten Aufruf zu sparen:

(ql:add-to-init-file)

Dann steht Quicklisp nach jedem Start von Common Lisp bereit. Jede Lisp-Implementierung hat ihre eigene Initialisierungsdatei, sodass der letzte Aufruf für jede Implementierung einmal erfolgen sollte. Wird die Personal Edition von LispWorks verwendet, muss der Aufruf von setup.lisp jedes Mal aufs Neue erfolgen, da die Initialisierungsdatei hier unbeachtet bleibt.

Nach der Installation von Quicklisp ist die Funktion für die tägliche Arbeit #'quickload. Mit ihr lassen sich sowohl die Fremdbibliotheken als auch die eigenen Projekte laden. Beispielsweise holen

(quickload :cl-ppcre)

oder

(quickload :first-cl-steps)

die Bibliothek CL-PPCRE beziehungsweise das eigene Projekt "first-cl-steps". Wird das eigene Projekt zuerst geladen, wird die Abhängigkeit CL-PPCRE gegebenenfalls automatisch zuerst heruntergeladen und installiert, anschließend das eigene Projekt gestartet. Es gibt für die eigene Software und die unter Quicklisp verfügbaren Bibliotheken also nur noch einen Anlaufpunkt.

Um Informationen über verfügbare Systeme zu bekommen, bieten sich die Funktionen #'ql:system-apropos und #'ql:system-list an. Während letzteres eine Liste aller installierbaren Systeme ausgibt, lässt sich mit ersterem gezielt in den Namen suchen. So gibt

(ql:system-apropos "xml")

eine Liste aller Systeme aus, die "xml" enthalten.

Quicklisp bietet drei Update-Funktionen. Zum einen #'ql:update-client zum Aktualisieren der Quicklisp-Software selbst, zum anderen die Funktionen #'ql:update-dist und #'ql:update-all-dists. Quicklisp organisiert die Bibliotheken in Distributionen; zurzeit ist das nur die Distribution "Quicklisp". Mit den beiden Aufrufen ql:update-client) und (ql:update-all-dists) werden also sowohl Quicklisp selbst als auch alle Pakete auf den neuesten Stand gebracht. Änderungen an den Paketen werden aufgelistet und sind einmal zu bestätigen.

Quicklisp speichert auch ältere Versionen der installierten Software. Tritt nach einem monatlichen Update ein Problem auf, lässt sich zu einem älteren Stand der Distribution zurückkehren. Dabei wird jede über Quicklisp installierte Software auf diesen älteren Stand zurückgesetzt, damit die Abhängigkeiten erhalten bleiben.

Ist eine Software nicht über Quicklisp installierbar, lässt sie sich als lokales Projekt unter ~/quicklisp/local-projects/ einrichten und ist dann ebenfalls mit #'quickload aufrufbar. Lokale Projekte werden von Quicklisp bevorzugt aufgerufen. Wird also eine andere Version einer Bibliothek benötigt, kann sie zusätzlich als lokales Projekt installiert werden, ohne an Quicklisp Änderungen vornehmen zu müssen.

Informationen über installierbare Quicklisp-Pakete und Downloadzahlen gibt es seit kurzem auf Quickdocs von Eitarow Fukamachi. Man findet eine Suchfunktion, die nicht nur im ASDF-Systemnamen, sondern auch die in der Paketdokumentation sucht. Es werden die README-Dateien und die Abhängigkeiten der Bibliotheken untereinander dargestellt sowie Links zu Quelle und Download bereitgestellt. Außerdem lässt sich die API der Bibliothek betrachten. Quickdocs wird jeweils kurz nach den monatlichen Updates von Quicklisp aktualisiert.

Neben Quicklisp und Quickdocs ist Quickproject erwähnenswert, das ebenfalls von Zach Beane stammt und sich über Quicklisp installieren lässt. Mit ihm wird mit nur einem Funktionsaufruf ein Projektrumpf in einem Unterverzeichnis angelegt, der eine README-Datei sowie alle Dateien aus der ASDF oben enthält.

Mit (ql:quickload :quickproject) wird Quickproject geladen und mit

(quickproject:make-project #P"~/src/lisp/first-cl-steps"
:depends-on '(cl-ppcre))

automatisch ein Projekt wie oben angelegt.