Reducers in Clojure 1.5

Kritik und Fazit

Wenn sich beim Entwickeln Verwunderung einstellt, dass der Einsatz von fold keinen Geschwindigkeitszuwachs zur Folge hat, liegen die Daten oft nicht in Vektoren vor. Bislang existieren Reducers-Varianten von map, mapcat, filter, remove, flatten, take-while, take und drop. Diese Funktionen lassen sich miteinander kombinieren, arbeiten aber nicht mit den Core-Funktionen wie partition zusammen, die "lazy" vorgehen. Zu solchen Zusammenstellungen kommt es gelegentlich, wenn bestehender Code auf die Reducers-Varianten portiert werden soll, um den Prozess zu beschleunigen. Die fehlende Kombinierbarkeit mit den Lazy-Core-Funktionen könnte sich als eine Hürde erweisen.

Im Rahmen seiner Vorträge zum Thema Reducers hat Spracherfinder Rich Hickey als eine Motivation angeführt, dass einmal geschriebene Programme bei neuen Rechnergenerationen wieder schneller werden, wie aus der Zeit der immer höheren Taktraten bekannt. Der Einsatz von fold erfolgt allerdings punktuell, und inwieweit der Einsatz eine generelle Beschleunigung durch mehr Kerne erlaubt, ist fraglich. Zudem zerlegt die aktuelle Implementierung das Problem unabhängig von der Anzahl der verfügbaren Kerne.

Ein weiterer Kritikpunkt ist, dass Anwender der Reducers-Bibliothek teilweise Implementierungsdetails anderer Funktionen kennen müssen. Beispielsweise lassen sich etwa die neuen Funktionen mit into verwenden, da into mit reduce implementiert ist, was Anwendern nicht unbedingt bewusst ist.

Die neue Reducers-Bibliothek in Clojure 1.5 bietet das Potenzial, bestehende und reduce verwendende Operationen zu beschleunigen. Der erste Schritt ist das Vermeiden von Overhead für die gewöhnlich eingesetzte Bedarfsauswertung, der zweite eine Parallelisierung der Verarbeitung für Daten, die in Form von Vektoren vorliegen. Clojure-Programmierern steht somit ein weiteres Werkzeug für die Entwicklung auf Mehrkernarchitekturen zur Verfügung. Inwieweit sich die Reducers-Bibliothek verbreitet, bleibt abzuwarten. (jul)

Stefan Kamphausen
ist Director DevOps & NLP bei der Firma Acrolinx in Berlin. Er ist Autor des deutschen Clojure Buchs und ein langjähriger Liebhaber der Familie der Lisp-artigen Programmiersprachen.