Quicklisp und mehr: Neues bei Common Lisp

Seite 2: Emacs, SLIME, ASDF

Inhaltsverzeichnis

Der Emacs steht für alle gängigen Betriebssysteme zur Verfügung. Für Linux, Mac oder FreeBSD kann er aus der Distribution heraus übersetzt oder als Paket installiert werden. Übersetzte Pakete für Windows sind ebenfalls bereitgestellt.

SLIME, der "The Superior Lisp Interaction Mode for Emacs" lässt sich über CVS beziehen:

cvs -d :pserver:anonymous:anonymous@common-lisp.net:/project/
slime/cvsroot co slime

oder als CVS-Snapshot herunterladen.

Nach der Installation sind Emacs und SLIME sowie SLIME und die Lisp-Implementierung jeweils miteinander bekannt zu machen. Dazu setzt man einige Variablen in der Emacs-Konfigurationsdatei. Diese lässt sich aus dem Emacs heraus laden:

C-x C-f ~/.emacs

(Sprich Ctrl-x gefolgt von Ctrl-f drücken, dann am erscheinenden Prompt ~/.emacs eingeben.) Dann ergänzt man sie um die folgenden anzupassenden Einträge.

;;; SLIME mit Emacs bekannt machen

;; Installationsort von SLIME, hier in ~/slime
(add-to-list 'load-path "/home/cpape/slime")
(add-to-list 'load-path "/home/cpape/slime/contrib")

;; Zeichensatz festlegen
(setq slime-net-coding-system 'utf-8-unix)

;; SLIME laden
(require 'slime)

;; nuetzliche Module von SLIME laden
(slime-setup '(slime-fancy))
(slime-setup '(slime-autodoc))

;; Link zur HyperSpec-Dokumentation
(setq common-lisp-hyperspec-root
"http://www.lispworks.com/documentation/HyperSpec/")

;;; die Lisp-Implementierung mit SLIME bekannt machen,
;;; hier CCL auf FreeBSD AMD64
(setq inferior-lisp-program "/home/cpape/ccl/fx86cl64 -I
/home/cpape/ccl/fx86cl64.image")

Ist die Konfigurationsdatei korrekt ergänzt, kann Common Lisp durch den Aufruf M-x slime starten. (Sprich Alt+x drücken, dann slime am Prompt eingeben.) Ab Emacs 24 ist SLIME auch über das eingebaute Paketsystem installierbar.

Neben der eigentlichen SLIME-Umgebung steht zusätzlich die HyperSpec-Dokumentation zur Verfügung, eine Hypertext-Fassung des ANSI-Standards für Common Lisp. Befindet sich der Cursor im Emacs auf einem Common-Lisp-Symbol, wird durch die Tastenkombination C-c C-d d der entsprechende Eintrag in der HyperSpec im Webbrowser aufgerufen. Die Dokumentation lässt sich auch herunterladen und dann lokal nutzen. Dazu ist der Eintrag in der Emacs-Konfiguration anzupassen.

Eine hervorragende Einführung in Common Lisp gibt Peter Seibel in seinem bei apress erschienenen und online ebenfalls verfügbaren Buch "Practical Common Lisp".

Soll Software auf unterschiedlichen Rechnern, vielleicht sogar für verschiedene Betriebssysteme entwickelt werden, sollte man sich Gedanken über die Organisation des Quellcodes machen. Einfach ist es, den eigenen Quellcode sortiert nach Programmiersprachen unter ~/src/ zu speichern, etwa für Common Lisp und JavaScript in ~/src/lisp und ~/src/javascript/. Das hat den Vorteil, dass die eigenen Common-Lisp-Programme innerhalb eines Verzeichnisbaums liegen und sich leicht aus der REPL heraus laden und starten lassen.

Ist ein Projekt etwas umfangreicher, sollte früh eine Projektbeschreibung erstellt werden. Dazu dient die Another System Definition Facility (ASDF). Sie ist Bestandteil der meisten Common-Lisp-Implementierungen und lässt sich auch über Quicklisp installieren.

Eine typische ASDF-Datei first-cl-steps.asd könnte so aussehen.

(asdf:defsystem :first-cl-steps
:serial t
:depends-on (:cl-ppcre)
:components ((:file :package)
(:file :first-cl-steps)))

Es wird zuerst eine externe Bibliothek CL-PPCRE für reguläre Ausdrücke als Abhängigkeit definiert. Das eigentliche Projekt besteht aus zwei Quelldateien: package.lisp und first-cl-steps.lisp. Das serial
bedeutet, dass die Dateien in der Reihenfolge ihres Auftretens geladen werden sollen.

Geladen wird das Projekt dann mit

(asdf:oos 'asdf:load-op :first-cl-steps)

Einfacher, als sich das zu merken, ist es, das Projekt mit Quicklisp wie weiter unten beschrieben zu laden.

Damit ASDF die eigene Software tatsächlich findet und Abhängigkeiten auflösen kann, kann ASDF unter Linux oder BSD der Ort der eigenen Projekte bekannt gemacht werden. Dazu legt man im Verzeichnis

~/.config/common-lisp/source-registry.conf.d/

eine Datei mit frei wählbarem Dateinamen, hier asdf2.conf, mit folgendem anzupassenden Inhalt an:

(:tree "/home/cpape/src/lisp/")

Wird ein neues Projekt zur Laufzeit angelegt, ist gegebenenfalls der Befehl (asdf:initialize-source-registry) aufzurufen, um ASDF das neue Projekt vorzustellen.

Ausführlich wird ASDF in der Anleitung beschrieben, unter anderem die Konfiguration unter Windows. In naher Zukunft wird wahrscheinlich der Übergang zu ASDF3 stattfinden.

Git ist weit verbreitet und wird an vielen Stellen beschrieben. Durch das Konzept der gleichberechtigten verteilten Repositorys wird das Arbeiten auf verschiedenen Systemen und Implementierungen unterstützt, auch wenn nur eine einzelne Person an einem Projekt arbeitet. Mit Magit existiert eine umfangreiche Unterstützung für Git im Emacs, die sich ab Emacs 24 durch den eingebauten Paketmanager installieren lässt. Zusammengefasst kann man zu Git im Vergleich zu Konkurrenten sagen, dass sich Softwareversionsmanagement nun ähnlich leichtgewichtig anfühlt wie mit Quicklisp das Installieren von Bibliotheken im Vergleich zu früheren Versuchen.