Eine Entwicklungsumgebung für Common Lisp unter Debian (Squeeze) einrichten

Zacharias Beane hat kürzlich quicklisp veröffentlicht. Ein neuer Ansatz zur Lösung eines alten Problems.

Common Lisp Software liegt verteilt auf Servern in aller Welt in unterschiedlichen Versionskontrollsystemen (VCS) herum.

Das Debian Team, welches sich der Paketierung von Common Lisp Software widmet, ist zwar fein aber klein, wird vom RL genötigt sich mit seltsamen Betätigungen die Miete zu erwirtschaften und regelmäßig von Bussen überfahren.

Der bislang verwendete Common Lisp Controller (CLC) steht mehr und mehr auf dem Abstellgleis.

So etwas wie CPAN für Perl ist bislang nur Wunschdenken ... gewesen?

Schauen wir uns Quicklisp doch einfach mal im Einsatz an.

Voraussetzungen:

Als erstes brauchen wir eine Common Lisp Implementation. Es gibt mehrere. Wir nehmen Steel Bank Common Lisp (SBCL). Das ist eine gute Wahl.

 # aptitude install sbcl

(Anmerkung: Codeblöcke in diesem Text, die mit einem Schweinegatter # beginnen sollen zeigen, dass der Befehl mit Rootrechten auszuführen ist.)

Quicklisp ist (noch) nicht für Debian paketiert. Daher holen wir es uns aus dem Netz.

# aptitude install wget

und dann

wget http://beta.quicklisp.org/quicklisp.lisp

Bevor wir die heruntergeladene Installerdatei verwenden können, müssen wir dem Common Lisp Controller noch ein wenig hilfreich unter die Arme greifen, damit unser /home/$user als Lagerstätte für Lisp Programme erkannt wird.

  # editor /etc/common-lisp/source-registry.conf.d/02-common-lisp-controller-userdir.conf

Den Inhalt der Datei verändern wir von

(:directory (:home #p".clc/systems/"))

zu

;;(:directory (:home #p".clc/systems/"))
(:directory (:HOME ".clc/systems/"))

Damit haben wir den ursprünglichen Eintrag kommentiert und SBCL kennt unsere Benutzerheimat.

Anmerkung für Nutzer von unstable (sid): Hier existiert noch eine weitere Datei "common-lisp-controller-userdir.conf" ohne das vorangestellte "02-". Auch diese muss in gleicher Weise bearbeitet werden.

Jetzt lernen wir den Read Eval Print Loop (REPL) von SBCL kennen, indem wir die heruntergeladene Datei laden.

  sbcl --load quicklisp.lisp

Die Ausgabe am Prompt sollte so aussehen:

niels@testing:~$ sbcl --load quicklisp.lisp
This is SBCL 1.0.40.0.debian, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.

         ==== quicklisp quickstart loaded ====

         To continue, evaluate: (quicklisp-quickstart:install)

     *

mit einem Cursor hinter dem Sternchen.

Freundlicherweise weist uns das Programm darauf hin, was wir als nächstes tun sollen. Allerdings wollen wir den voreingestellten Pfad der Quicklisp Installation "~/quicklisp" verändern und das Verzeichnis verstecken. Daher geben wir folgendes am Prompt ein und bestätigen mit "Enter"

  * (quicklisp-quickstart:install :path ".quicklisp/")

Die Informationen im REPL sind hoffentlich selbsterklärend.

Da wir Quicklisp nicht nur testen, sondern auch verwenden wollen gehen wir auf den Vorschlag ein, es standardmäßig zu laden, sobald wir sbcl aufrufen.

  * (ql:add-to-init-file)

Quicklisp teilt uns mit, dass es unsere Userkonfiguration von sbcl ergänzen wird und fordert uns auf dies mit "Enter" zu bestätigen.

Schauen wir uns noch ein wenig um. Da wir eine Entwicklungsumgebung haben wollen suchen wir nach dem Emacs Mode "Slime".

* (ql:system-apropos "slime")  

; Fetching #<URL "http://beta.quicklisp.org/dist/quicklisp/2010-12-07/systems.  txt">
; 69.36KB
==================================================
71,028 bytes in 0.12 seconds (603.16KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/dist/quicklisp/2010-12-07/releases  .txt">
; 102.33KB
==================================================
104,791 bytes in 0.18 seconds (578.16KB/sec)
#<SYSTEM arnesi.slime-extras / arnesi-20101006-darcs / quicklisp 2010-12-07>
#<SYSTEM quicklisp-slime-helper / quicklisp-slime-helper-20101107-git / quickl  isp 2010-12-07>
NIL

Quicklisp ein eigenes Helferskript an Bord, um Slime aufzusetzen.

* (ql:quickload "quicklisp-slime-helper")

Nach einigen Meldungen zum Download und zur Kompilation der benötigten Pakete meldet uns Quicklisp, dass es uns eine Konfigurationserweitung für Emacs geschrieben hat, die wir in unsere Benutzerkonfiguration eintragen können.

 slime-helper.el installed in "/home/niels/.quicklisp/slime-helper.el"

 To use, add this to your ~/.emacs:

 (load (expand-file-name "~/.quicklisp/slime-helper.el"))

Wohlan! Tun wir wie uns geheissen.

Zunächst verlassen wir den REPL von SBCL.

* (sb-ext:quit)

Damit landen wir wieder auf der Konsole. Falls Emacs bereits installiert ist, können wir die Konfigurationsdatei sofort bearbeiten. Falls nicht holen wir uns den Editor aus den Debian Repos.

  aptitude install emacs

oder

aptitude install emacs23-nox

für die Graphik-Schwaben.

editor .emacs

In diese Datei schreiben wir folgende Einträge:

(setq inferior-lisp-program "sbcl")
(load (expand-file-name "~/.quicklisp/slime-helper.el")

Die erste Zeile sorgt dafür, dass Emacs SBCL als das zu benutzende Lisp erkennt und nicht vergeblich versucht den Slime-Mode in seinem hausinternen Lisp zu laden.

Emacs ist ein Programm, dass nicht gestartet sondern abgefeuert wird. Das tun wir jetzt.

  emacs

Als nächstes laden wir den Slime-Mode, indem wir der Tastenkombination [Alt]+[x] die Eingabe "slime" und ein beherztes "Enter" folgen lassen. Nach einigen Meldungen landen wir (hoffentlich) im REPL von Slime.

 ; SLIME 2010-12-02
 CL-USER>

Wo ein Cursor auf unsere wohldurchdachten Anweisungseingaben wartet.

; SLIME 2010-12-02
CL-USER> (apropos 'quicklisp)

Den Slime-Mode beendet man durch die Abkürzung "," gefolgt von einem "quit".

Hack, and be merry!

Die im Post erwähnte zweite Konfigurationsdatei in unstable ist anscheinend ein Artefakt aus einer älteren Version des CLC. Sollte also in einem frisch aufgesetzten sid erst gar nicht vorhanden sein.

Kommentar von Niels Di 25 Jan 2011 00:22:57 CET
Kommentar erstellen