Lesezeit: 5 Minuten

Scheme ist eine vorrangig funktionale Sprache und ein Dialekt aus der Familie der Lisp-Sprachen. Ebenso wie später Common Lisp ist Scheme gewissermaßen ein Nachfolger des Dialektes Maclisp.

Die Arbeit an Scheme begann in den 1970er Jahren und sollte den beiden Erfindern, Guy L. Steele Jr. und Gerald Jay Sussman, vom MIT AI Lab dazu dienen, das 1973 erstmal beschriebene Aktorenmodell von Carl Hewitt zu verstehen. In Anlehnung an die Lisp-Dialekte Planner und Conniver hieß Scheme ursprünglich Schemer.

Scheme ist durch das IEEE (Institute of Electrical and Electronics Engineers) standardisiert. Der aktuell verbreitetste Standard ist R5RS aus dem Jahr 1998. 2013 erschien der Revisedn Report on the Algorithmic Language Scheme (RnRS) mit dem Zusatz small mit der Versionsnummer 7. Der nächste geplante Standard R7RS-large ist zum Zeitpunkt dieses Beitrags noch nicht abgeschlossen. Mit R7RS wird Scheme das erste Mal in zwei Varianten spezifiziert.

Es gibt diverse Implementierungen von Scheme, die die verschiedenen Standardisierungen zum Teil oder vollständig abbilden. Zu den bekannteren zählen Chez Scheme, CHICKEN, Gambit, GNU Scheme und SCM.

Alleinstellungsmerkmale

Scheme ist der erste Lisp-Dialekt, der Tail Call Optimization, einen lexikalischen Scope und First-Class Continuation umsetzte. Scheme ist sehr minimalistisch und damit in der Lisp-Welt das passende Gegenstück zum industriereifen Common Lisp mit seinem großen Ökosystem und dem mächtigen CLOS (Common Lisp Object System).

Scheme ist auch mit etwa 50 Jahren eine recht alte Sprache, gegenüber Common Lisp fristet Scheme zwar ein Nischendasein, verliert aber nicht an Popularität und wird aktiv weiter spezifiziert, während andere zu damaliger Zeit populäre Sprachen wie die ALGOL-Sprachenfamilie mittlerweile ausgestorben sind.

Einsatzbereiche

Scheme wird in erster Linie im akademischen Bereich verwendet, zum Beispiel um Informatik zu lehren. Das Buch Structure and Interpretation of Computer Programs, auch als Wizard Book bekannt, gilt heute als Klassiker und beschreibt Konzepte wie Rekursion, Abstraktion und Modularisierung anhand von in Scheme geschrieben Beispielen.

Scheme findet vereinzelt auch im naturwissenschaftlichen Bereich Anwendung und wird unter anderem bei der NASA eingesetzt. ITA Software setzt Scheme etwa zur Berechnung von Flugrouten ein. Der MIT App Inventor, eine IDE für Android Apps, ist zum Teil in Scheme geschrieben.

Scheme wird auch gerne als Skriptingsprache eingesetzt, zum Beispiel in der Bildbearbeitungssoftware GIMP und bei der Umsetzung der Bewegungsabläufe im Film „Final Fantasy: The Spirits Within“.

Die Transformations- und Formatierungssprache DSSSL (Document Style Semantics and Specification Language) für SGML-Dokumente inklusive XML, die als Vorgängerin von XSL und XSLT gilt, verwendet Scheme. GNU Guile (GNU Ubiquitous Intelligent Language for Extensions), die Erweiterungssprache des Betriebssystems GNU, setzt ebenfalls auf Scheme.

Haxima/Nazghul sind eine Engine und ein darin geschriebenes Computerspiel, welche beide in Scheme implementiert sind.

Pros

Scheme bringt die zahlreichen Vorteile eines Lisp-Dialektes mit, die ich schon in meinem Beitag über Common Lisp beschrieben habe. Dazu zählen die allgemeine Syntax und die Homoikonität. Ebenfalls aus der Lisp-Welt bringt die Sprache Macros und Metaprogrammierung mit. Scheme ist minimalistisch und dadurch sehr schnell in Gänze zu erlernen. Es ist klein genug, um sich gut fürs Skripting und den Einsatz im Embedded-Bereich zu eignen, vor allem, da einige Scheme-Interpreter den Code direkt in C-Code übersetzen. Scheme-Code wird nativ kompiliert und ist in der Ausführung sehr schnell. Viele Interpreter kommen mit einer REPL und einem Foreign-Interface, so dass Interaktion mit C-Code möglich sind und dadurch das Ökosystem erweitert wird.

Cons

Zwar ist Scheme standardisiert, die unterschiedlichen Interpreter sind aber zueinander oft nicht kompatibel, was Portierungen erschwert. Im Gegensatz zu Common Lisp liegen in Scheme alle Funktionen in einem gemeinsamen Namensraum. Scheme fehlen gegenüber Common Lisp das gewachsene Ökosystem und die große Community. Beruflich Scheme zu seinem Schwerpunkt zu machen, dürfte ein sehr schwieriges Unterfangen werden.

Datenblatt

NameScheme
Webseitekeine
Erscheinungsjahr1975
Aktuellste Version (Stand 20. November 2022)R7RS-small (Spezifikation) aus dem Jahr 2013
Typisierungdynamisch
Paradigmenimperativ
prozedural
funktional
aspektorientiert
ProsCons
sehr schnellnicht gut portierbar, viele Interpreter mit verschiedenen Unterstützungsgraden für die spezifizierten Standards
einfach zu erlernengemeinsamer Namensraum, keine Objektorientierung
sehr flexibelkleines Ökosystem
sehr simple Syntaxkleine Community
Metaprogrammierung durch MacrosEinsatz außerhalb von Hobby-Projekten eher schwierig
Interaktionsmöglichkeiten mit C-Code
gute Eignung für Skripting und Embedded

virtuallet

virtuallet ist ein kleines Programm von mir, welches ich in diversen Programmiersprachen implementiert habe. Hier geht es direkt zum Scheme-Code von virtuallet auf GitLab. Hier gibt es weitere Infos zu virtuallet.