Stefan Kamphausen, Tim Oliver Kaiser

Clojure

Grundlagen, Concurrent Programming, Java

2010, dpunkt Verlag

344 Seiten

ISBN 978-3-89864-684-0

€ 36,90

Die Programmiersprache Lisp existiert seit mehr als fünfzig Jahren und hat sich in der Zeit zu einer ganzen Familie von Sprachen fortentwickelt. Ein recht neues Familienmitglied ist Clojure, ein Lisp das unter anderem wegen seiner guten Integration in die Java Virtual Machine (JVM) und Unterstützung von nebenläufiger Programmierung zurzeit auch außerhalb der traditionellen Lisp-"Gemeinde" einige Aufmerksamkeit erfährt.

Mit "Clojure" von Stefan Kamphausen und Tim Oliver Kaiser aus dem dpunkt Verlag liegt das erste deutschsprachige Buch zu Clojure vor. Die Autoren positionieren es als einführenden Text für Leser mit Programmiererfahrung in Java.

Auf ein einleitendes Kapitel zur Geschichte von Lisp und zur Motivation für die Entwicklung von Clojure folgt im zweiten eine Einführung in die grundlegenden Sprachelemente. Es vermittelt auf circa 150 Seiten den Sprachkern, soweit er auch in traditionellem Lisp vorhanden ist. Die Autoren versuchen, einen großen Teil von Clojures Sprachumfangs vorzustellen und gleichzeitig Konzepte funktionaler Programmierung zu nahezubringen. Die behandelten Themen reichen von der Syntax über Clojures Datenstrukturen mit verzögerter Auswertung, Closures und Funktionen höherer Ordnung bis zu Makros. Dem Leser werden dabei stets kurze Codebeispiele im Text präsentiert, mit denen er die vorgestellten Themen nachvollziehen und als Grundlage für eigene Versuche nutzen kann.

Clojures Sprachmitteln für nebenläufige Programmierung ist das dritte Kapitel gewidmet. Die Autoren geben einen allgemeinen Überblick über Methoden zur Realisierung nebenläufiger Programme und deren Umsetzung in Clojure. In dem Bereich weichen die in Clojure verfolgten Ansätzen mit Agenten und Software Transactional Memory vom Mainstream ab. Angenehm fällt auf, dass Kamphausen und Kaiser diese Design-Entscheidungen nicht als magisches Mittel gegen alle Probleme nebenläufiger Programmierung darstellen, sondern auch die verbleibenden kritischen Punkte erwähnen. Ein größeres Beispiel, das anhand eines genetischen Algorithmus die Verwendung von Atomen und Agenten demonstriert, schließt das Kapitel ab.

Kapitel vier behandelt die Integration von Clojure mit Java und der JVM. Die Autoren beschreiben sowohl die Nutzung von Java in Clojure-Code als auch die Möglichkeiten, Clojure-Funktionen als Bibliothek in Java-Programmen zu verwenden. Als Beispiel für den Einsatz von Java aus Clojure zeigen die Autoren eine Anwendung, die mit einer Swing-GUI eine logistische Abbildung (Feigenbaumdiagramm) zeichnet.

Mit "Protocols and Datatypes" werden im fünften Kapitel zwei neuere Konzepte vorgestellt, die mit der aktuellen Version 1.2 eingeführt wurden. Dieses Sprachmittel dient der Definition von Abstraktionen und deren Implementierungen. Das Kapitel beginnt mit einer Beschreibung des sogenannten "Expression Problems", das verständlich machen soll, warum Clojure hier nicht Javas traditionellem Lösungsansatz "Interfaces, Vererbung und Klassen" folgt, sondern als Alternative eben "Protocols und Datatypes" anbietet.

Abgeschlossen wird das Buch mit der Beschreibung einer Auswahl bestehender Clojure-Bibliotheken und einer kritischen Würdigung der Sprache sowie einem Ausblick auf künftige Entwicklungen.

Das Buch bietet einen guten Überblick über das Potenzial von Clojure. Es beschreibt alle Sprachelemente des aktuellen Stands. Da Clojure einen relativ großen Sprachumfang hat, ist die Vollständigkeit bei einem Buchumfang von etwa 310 Seiten nur mit einem kompakten Schreibstil zu erreichen. Das Buch eignet sich daher also weniger zum oberflächlichen Lesen, sondern verlangt die Mitarbeit der Leser. (ane)

