Open Source im professionellen Einsatz

© Rene Drouyer, Fotolia.com

Common Lisp und die Smalltalk-Implementierung Squeak

Schicke Klassiker

Die Programmiersprachen Lisp und Smalltalk haben schon einige Jahrzehnte auf dem Buckel. Doch dank engagierter Communitys glänzen sie mit modernen Bibliotheken. Beim Umsortieren von Fußnoten und vor allem bei der Webprogrammierung zeigen sie, was in ihnen steckt.

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.

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.

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.

Listing 1: Die Klasse
»album«

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))

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook