Interview mit Clojure-Vater Rich Hickey

Clojure – oder die Qual von zwei Jahrzehnten mit C++, Java und C#

Clojure ist eine fortgeschrittene JVM-basierte Sprache, die Lisp mit einer modernen Umgebung, der Unterstützung für parallele Verarbeitung in Multi-Core-Umgebungen und Java-Integration kombiniert. In einem Interview mit JAXenter spricht Clojure-Gründer Rich Hickey über die Design-Ziele der Sprache, ihren Concurrency-Ansatz und seine Einflüsse bei der Erstellung von Clojure.

JAXenter: Hallo Rich! Kannst du uns erstmal eine kurze Erklärung geben, was Clojure eigentlich ist?

Rich Hickey: Clojure ist eine Mehrzwecksprache, die für die JVM entwickelt wurde. Die starke Interoperabilität mit Java ist also ein Designziel, nicht nur ein Implementierungsdetail. Clojure ist dynamisch getypt, ein Lisp-Dialekt und zielt auf funktionale Programmierung ab.

JAXenter: Was hat dich bei der Entwicklung der Sprache am meisten beeinflusst?

Rich Hickey: Die Qual von zwei Jahrzehnten der Entwicklung in C++, Java und C#, und besonders die Probleme großer zustandsbehafteter OO-Systeme. Lisp, Haskell und ML sind die Sprachen, die mich beeinflusst haben.

JAXenter: Wie baut Clojure auf der Lisp-Programmiersprache auf?

Rich Hickey: Clojure ist eine Lisp, unterstützt Code als Daten und syntaktische Abstraktion über Makros. Es unterscheidet sich von traditionellen Lisps dahingehend, dass es mehr Datenstrukturen bereitstellt, zum Beispiel Vektoren und Maps, und zwar genauso „first-class“ wie Listen. Die Kerndatenstrukturen sind immutable und die Kernbibliothek ist in Hinblick auf Abstraktionen definiert, nicht konkrete Datentypen. Clojure besitzt eine Syntax für das Ansteuern von Java und die Reduktion der Klammerorgien traditioneller Lisps.

JAXenter: Wie sieht der Concurrency-Ansatz von Clojure aus?

Rich Hickey: Clojures Concurrency-Ansatz ergibt sich aus dem Umgang mit Status. Die grundsätzliche Idee ist die, dass der Status eines zusammengesetzten Objekts ein unveränderlicher Wert ist, ungefähr so wie die Zahl 42. Dann können wir nämlich die Identität eines Objekts und seinen Status unabhängig von einander betrachten. Den Status zu ändern bedeutet, einen anderen unveränderlichen Wert aufzunehmen und nicht, ihn zu ändern. Um das zu ermöglichen, muss es effizient sein, neue Versionen von großen unveränderlichen zusammengesetzten Objekten zu erzeugen. Clojure enthält persistente Datenstrukturen, die sich durch genau diese Eigenschaft auszeichnen. Darüber hinaus braucht man Konstrukte, um Identitäten unabhängig von Werten zu repräsentieren. Dafür besitzt Clojure eine Menge von Referenztypen. Diese Referenzen haben wiederum transaktionale, asynchrone und andere Concurrency-Semantik.

JAXenter: Was ist für dich ein Hauptvorteil von Clojure, jenseits von Concurrency?

Rich Hickey: Der Hauptvorteil von Clojure ist Einfachheit. Clojure zerlegt vieles in seine einzelnen Bestandteile, was normalerweise fest verbunden ist. Das Ergebnis ist, dass du deine Programme aus atomareren Komponenten heraus baust, was wiederum geringere Komplexität mit sich bringt. Auch funktionale Programmierung reduziert Komplexität auf signifikante Art und Weise.

JAXenter: Gibt es denn deiner Meinung nach einen bestimmten Anwendungsbereich, in dem der Einsatz von Clojure besonders gut passt?

Rich Hickey: Clojure sollte überall dort passen, wo es Java gibt. In welchem Bereich wäre es für die Programmierung nicht nützlich, einfacher zu sein? Klar, du willst in erster Linie mit einfachen Komponenten arbeiten, wenn du etwas Komplexes baust.

JAXenter: Was steht jetzt als Nächstes für Clojure an? Wie wird sich die Sprache weiterentwickeln?

Rich Hickey: Den meisten Zuwachs werden wir in den Bibliotheken sehen, und es gibt interessante Entwicklungen in der Parallelität, im logischen Programmieren und so weiter. Im Core Compiler werden wir wohl weiter Komponenten in Clojure selbst implementieren. Das wird die Portierung, die Wartbarkeit und Erweiterung von Clojure vereinfachen.

JAXenter: Hast du für die Zukunft Designziele, die du mit Clojure erreichen willst?

Rich Hickey: Ich will es noch einfacher machen.

JAXenter: Rich, vielen Dank für das Gespräch!

Rich Hickey ist Begründer der Sprache Clojure und als unabhängiger Softwareentwickler, Consultant und Anwendungsarchitekt mit über 20 Jahren Erfahrung tätig. Vor Clojure entwickelte er dotLisp, ein ähnliches Projekt wie Clojure, das auf der .NET-Plattform basiert.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.