Das Linux-Magazin hatte seine Programmieraufgaben auch an Entwickler geschickt, die abseits der aktuellen Mainstream-Sprachen arbeiten. Zwei nahmen die Herausforderung an und reichten Lösungen in Lisp und Smalltalk ein, um für ihre Lieblingssprachen zu werben. Vollständige Listings gibt\'s online [1].
Für die Implementierung der Aufgaben in Lisp, genauer in der Ansi-standardisierten Variante Common Lisp (CL), sorgte der 29-jährige Entwickler Marco Baringer (Abbildung 1). Der gebürtige US-Amerikaner studierte in Italien an der Universität Turin Informatik und lebt derzeit in Berlin. Neben Perl, das er zum System-Scripting unter Mac OS X und Linux verwendet, programmiert Baringer ausschließlich Lisp. Sein Geld verdient er mit Lisp-Beratung und -Entwicklung bei der Firma Clozure Associates [2], einer der wenigen reinen Lisp-Consulting-Firmen weltweit.
Abbildung 1: Amerikaner in Berlin: Marco Baringer arbeitet für eine der wenigen reinen Lisp-Firmen.
Je oller, je doller
Die Sprachfamilie Lisp existiert etwa seit 1958, als sich am MIT der Hochschullehrer John McCarthy mit seinen Kollegen an ihre erste Umsetzung machte [3]. Damit gehört diese Sprache, zusammen mit Fortran, zu den ältesten noch im Einsatz befindlichen Programmiersprachen. Heute gibt es eine kleine, aber begeisterte Lisp-Community, die schwergewichtige Industrie-Anwendungen, beispielsweise Flugbuchungssysteme, entwickelt und gleichzeitig unterhaltsame Zeitgeist-Anwendungen wie den Online-Bildeditor Roflbot [4] hervorbringt.
Baringer betreut einige Lisp-Bibliotheken und ist einer der drei Hauptentwickler des Superior Lisp Interaction Mode for Emacs (Slime, [5]), der den GNU-Editor zur integrierten Entwicklungsumgebung für Lisp aufrüstet. Das Gespann Slime-Emacs kommt bei der Arbeit mit Open-Source-Implementierungen wie Clisp oder SBCL als De-facto-Standard zum Einsatz, lediglich einige kommerzielle Lisp-Systeme bringen eigene Tools mit.
Multi-Paradigma
Lisp gibt dem Entwickler mehrere Programmier-Paradigmen an die Hand; für die Fußnoten-Aufgabe des Linux-Magazins hat Marco Baringer hauptsächlich funktional programmiert. Er schrieb zuerst die Funktion »reorder-footnotes-by-order-of appearance«, die die Fußnoten nach ihrem Auftauchen im Text neu nummeriert.
Um die Fußnoten in den eingelesenen Textzeilen zu finden, verwendet er die Regex-Bibliothek CL-PPCRE (Portable Perl-compatible regular expressions for Common Lisp, [5]). Die alte Nummer einer Fußnote zusammen mit ihrem Ersatz speichert er in einer Liste von Paaren. Da die Aufgabenstellung noch eine weitere Interpretation zulässt, programmierte er zudem die Funktion »reorder-footnotes-by-order-listing-order«, die die Verweise nach ihrem Erscheinen in der Sektion »@footnote:« durchzählt. Code, den beide Blöcke verwenden, lagerte Baringer in separate Funktionen aus.
Den Quelltext schreibt der Slime-Programmierer in einem Emacs-Textpuffer, Tastaturbefehle kompilieren und laden den Code. Zum Debuggen dient die interaktive Befehlszeile, die Slime zur Verfügung stellt, REPL (Read-Evaluate-Print-Loop) genannt (Abbildung 2).
Abbildung 2: Das Gespann Emacs-Slime gibt das Resultat der Fußnoten-Programmieraufgabe aus.
Bei der Lösung der zweiten Programmieraufgabe nutzt Marco Baringer einen anderen Ansatz: "Lisp erlaubt mir, nach Wunsch funktional oder objektorientiert zu programmieren", kommentiert er sein Programm. Er geht von der Datenstruktur aus und schafft zunächst die Klasse »album« mit den benötigten Eigenschaften Titel, Künstler, Jahr und Genre (Listing 1), dazu Funktionen, um Alben anzulegen zu ändern oder zu suchen.
01 (defclass album ()
02 ((id :type integer :reader id :initarg :id)
03 (title :type (or string null) :initarg :title :accessor title)
04 (artist :type (or string null) :initarg :artist :accessor artist)
05 (year :type (integer 0) :initarg :year :accessor year)
06 (genre :type genre :initarg :genre :accessor genre))
07 (:metaclass ele:persistent-metaclass))
|