Klammer auf
Sprachen wie Clojure oder Scala haben den funktionalen Programmierstil wieder ins GesprÀch gebracht. Weiter vorn auf der Beliebtheitsskala steht jedoch immer noch der erste Vertreter der Gattung: Lisp.
Lisp ist nach Fortran die zweitĂ€lteste Programmiersprache, zĂ€hlt im Gegensatz zu diesem jedoch immer noch als âmainstream languageâ â jedenfalls, wenn es nach dem TIOBE-Index geht. Dort belegte das geistige Kind des kĂŒrzlich verstorbenen John McCarthy (siehe Seite 20 in iX 12/2011) im Oktober 2010 immerhin Platz 13, wĂ€hrend sich das im wissenschaftlichen Bereich noch hĂ€ufig anzutreffende Fortran mit Rang 31 zufriedengeben musste.
Das könnte daran liegen, dass Lisp deutlich vielseitiger ist: Es unterstĂŒtzt funktionale, imperative und objektorientierte Programmierung sowie das interaktive Arbeiten mit einem Interpreter nebst dazugehörigem Quelltext-Debugger. AuĂerdem versteht sich Lisp hervorragend auf das Manipulieren symbolischer AusdrĂŒcke, sogenannter S-Expressions. Daher kommt es in einschlĂ€giger Software wie dem Computer-Algebra-System Maxima oder dem Theorem Prover ACL2 zum Einsatz.
Beide verlangen ein Lisp, das weitgehend dem Standard ANSI INCITS 226-1994 (Common Lisp) entspricht. DafĂŒr bietet sich zum Beispiel GNU CLISP an. Die von Bruno Haible und Michael Stoll ursprĂŒnglich fĂŒr den Atari ST geschriebene Software lĂ€uft auf nahezu jedem Linux- oder Unix-System, Max OS X und Windows. Dabei geht sie sparsam mit den Systemressourcen um: Das Programm kommt nach Aussage der Entwickler mit 4 MByte RAM aus. Ein integrierter Compiler erzeugt Bytecode fĂŒr eine virtuelle Stack-Maschine, der um den Faktor 5 schneller laufen soll als interpretierter Code.
Schnittstelle zu C
DarĂŒber hinaus bietet CLISP mit seinem Foreign Function Interface (FFI) die Möglichkeit, in C geschriebene Routinen einzubinden. Auf Unix-kompatiblen Plattformen, die die Funktionen dlopen und dlsym kennen, kann das auch zur Laufzeit geschehen. Viele Funktionen sind jedoch bereits vorhanden, etwa ein Socket-Interface fĂŒr den Netzzugriff, Perl- und POSIX-kompatible Regular Expressions sowie eine Schnittstelle zu GNU gettext, die âinternationalisierteâ Meldungen ermöglicht. Zugriff auf das X Window System bekommt der Entwickler per CLX. Inzwischen ist CLISP Teil des GNU-Projekts. Das auf Kyoto Common Lisp basierende GNU Common Lisp (GCL) andererseits scheint verwaist: Die letzte Release kam 2005 heraus.
Etwas weniger portabel ist das an der Carnegie Mellon University entstandene CMUCL. Offiziell unterstĂŒtzt das Projekt nur Linux, Mac OS X, FreeBSD und NetBSD auf Intel-kompatiblen CPUs sowie Solaris/SPARC. Eine Portierung auf andere Plattformen dĂŒrfte nicht zuletzt deshalb Schwierigkeiten bereiten, weil der integrierte Compiler im Gegensatz zu dem von CLISP Maschinencode erzeugt, der sich in puncto AusfĂŒhrungstempo mit dem eines C-Compilers messen können soll. Unter Linux/x86 kann CMUCL statt der regulĂ€ren Floating-Point-Befehle des Prozessors den SSE2-Befehlssatz verwenden.
Das Foreign Function Interface von CMUCL kann auf selbst in C geschriebene Routinen, Shared Libraries und Linux/Unix-Systemaufrufe zugreifen. AuĂerdem unterstĂŒtzt die Software Interprocess Communication (IPC) und Remote Procedure Calls (RPC). Die Entwicklungsumgebung bringt einen Emacs-Ă€hnlichen Editor, einen grafischen Quellcode-Debugger und einen Code Profiler mit.
Steel Bank Common Lisp (SBCL) entstand 1999 aus CMUCL. Im Gegensatz zu diesem lĂ€uft es auch auf OpenBSD, Solaris/x86 und Windows sowie unter Linux mit PowerPC-, SPARC-, Alpha- oder MIPS-Prozessor. FĂŒr Linux/x86, Mac OS X und FreeBSD sind 64-Bit-Varianten verfĂŒgbar. AuĂerdem kann SBCL auf diversen Plattformen, darunter Linux/x86, native Threads nutzen, wĂ€hrend CMUCL auf User Space Threads und damit auf einen Prozessorkern beschrĂ€nkt ist. Die Entwickler beider Projekte arbeiten eng zusammen, sodass Verbesserungen und Bugfixes in der Regel in beide Programme einflieĂen. Ein Vorteil beider gegenĂŒber CLISP besteht in den weniger strikten Lizenzbedingungen: GroĂe Teile sind Public Domain, die ĂŒbrigen stehen unter der BSD- oder MIT-Lizenz.
Klammern unter der Haube
Lisp eignet sich jedoch nicht nur als Entwicklungsplattform. Embeddable Common Lisp (ECL) etwa erlaubt es, Common Lisp als eingebettete Sprache beziehungsweise Basis fĂŒr eine Domain Specific Language (DSL) in eigenen C/C++-Anwendungen zu nutzen. Per Foreign Function Interface lassen sich eigene Funktionen hinzufĂŒgen. Umgekehrt kann man Standard-Lisp-Funktionen von C aus aufrufen. ECL unterstĂŒtzt Multithreading mit nativen Threads, die aus historischen GrĂŒnden allerdings âProzesseâ heiĂen.
Mit dem mitgelieferten Compiler lĂ€sst sich der Lisp-Code in âFastloadâ-Dateien verwandeln, die man zur Laufzeit in den Lisp-Interpreter integrieren kann. Es ist jedoch auch möglich, die Routinen in einer Bibliothek abzulegen und diese mit der Anwendung zu linken. Die Software steht unter Version zwei der GNU Library General Public License (LGPL) und lĂ€sst sich unter Linux, *BSD, Windows ab XP, Mac OS X ab 10.4 sowie Solaris verwenden.
Alle Links: www.ix.de/ix1112135 [1] (mr [2])
URL dieses Artikels:
https://www.heise.de/-1377200
Links in diesem Artikel:
[1] http://www.ix.de/ix1112135
[2] mailto:mr@ix.de
Copyright © 2011 Heise Medien