Hier wird Java-Slang gesprochen

Für ein schlankes Java – Arbeit an Vavr 1.0 geht voran

Marcel Richters
Vavr

© Shutterstock.com / Anetlanda

Im Mai 2017 erschien die letzte Version der ursprünglich als Javaslang bezeichneten Library, die sich zum Ziel gesetzt hat, „Java auf den Kopf zu stellen“. Das Ideensammlen ist laut den Entwicklern vorbei, es wird ab sofort gecodet. Damit rückt Vavr 1.0 immer näher. Aktuell haben die Vavr-Macher einen Ausblick auf die erste Hauptversion gegeben.

Schon fast ein Jahr ist es her, dass Vavr in Version 0.9.0 erschienen ist. Aber es scheint so, als käme die finale Version des ehemaligen Javaslang mit großen Schritten näher. Wie die Entwickler mitteilten, hat der Redesign-Prozess vor wenigen Tagen begonnen und die „über Monate hinweg gesammelten Ideen“ werden jetzt eingearbeitet. Dabei soll es vor allem um Vereinfachung und Reduktion gehen, je weiter der Slang in die Hostsprache – also Java – integriert wird. Zwar sei das Hauptanliegen, sich an Java auszurichten, aber auch das Typsystem von Java soll für Vavr überarbeitet werden. Es wird wohl aller Voraussicht nach zu Breaking Changes kommen, die Typ-Hierarchie soll von Grund auf neu designt werden.

Ein schlankeres Java?

Einer der Hauptkritikpunkte der Entwickler von Vavr ist, dass Java Tuples und n-ary-Funktionen nicht gut genug in Java integriert sind. Um dies zu beheben, soll das Design von Java in Vavr entsprechend angepasst werden – und zwar möglichst einfach. Als Möglichkeiten sehen die Entwickler die Umwandlung der Funktionen mit mehreren Argumenten in solche mit einfachem Argument als Alternative Notation für n-ary-Funktionen:

Function3<T1, T2, T3, R> f3 = (t1, t2, t3) -> r;

Function<T1, Function<T2, Function<T3, R>>> f = t1 -> t2 -> t3 -> r;

Die Local Variable Type Inference in Java 10 betrachten die Entwickler als keine große Hilfe, da var (bislang) keine Lambdas unterstützt.
Heterogene Listen werden nicht implementiert, aber heterogene generische Typen sollen zum Einsatz kommen, sie werden durch rekursive Typ-Definitionen ausgedrückt:

HCons<String, HCons<Integer, HCons<Boolean, HNil>>> x = HList.of("Vavr", HList.of(1, HList.of(true, HList.empty()));

Um die Anzahl der CheckedFunctions einzugrenzen, wurde deren Anzahl auf diejenigen beschränkt, welche nicht auf andere Art und Weise ausgedrückt werden können. Daher soll Vavr 1.0 nur noch fünf CheckedFunctions umfassen:

  • CheckedFunction<T, R>
  • CheckedRunnable ≈ CheckedFunction<void, void>
  • CheckedSupplier<R> ≈ CheckedFunction<void, R>
  • CheckedConsumer<T> ≈ CheckedFunction<T, void>
  • CheckedPredicate<T> ≈ CheckedFunction<T, boolean>
Java-Slang Vavr

Die Struktur von Vavr soll möglichst einfach sein. Quelle: blog.vavr.io

Die Vereinfachung soll aber noch weiter gehen. So wurden „nutzlose“ Interfaces wie Lambda und Tuple ebenso entfernt, wie Function0..8 und Tuple0..8, Tuple0 und Tuple1 bezeichnen die Entwickler als redundant, in den meisten Fällen würden ohnehin Tuple2, selten Tuple3 genutzt. Tuple4+ würde gar nicht benötigt. Da diese Änderung Auswirkungen auf Vavrs Pattern-Matching-API und die Comprehensions haben wird und Native Pattern Matching in Java eingeführt wird, wird der Schritt aber wohl noch einmal überdacht.

Sorgen bereitet den Entwicklern die native Modularisierung in Java 9, wenn gleichzeitig noch eine Unterstützung für Java 8 erreicht werden soll. Daher ist nicht klar, ob Vavr 1.0 Versionen unterhalb von Java 9 überhaupt unterstützen soll. Für Nutzer von Java 8 und darunter, eigne sich Vavr 0.9.x. Ob wirklich alles so umgesetzt wird, wie geplant, ist aber noch nicht sicher. Derzeit befindet sich Vavr 1.0 noch in der Entwicklung. Die Updates gibt es regelmäßig im Blog der Entwickler.

Verwandte Themen:

Geschrieben von
Marcel Richters
Marcel Richters
Marcel hat Soziologie an der Goethe-Universität in Frankfurt am Main studiert und danach als E-Commerce-Manager gearbeitet. Seit Februar 2018 unterstützt er das Team von JAXenter als Redakteur. Daneben arbeitet er als freier Journalist in der Mainmetropole.
Kommentare

Schreibe einen Kommentar

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