Projekt Valhalla: Value-Types for Java

Brian Goetz hat ein neues Projekt vorgestellt:

http://cr.openjdk.java.net/~briangoetz/valhalla/specialization.html

Im Endeffekt wäre es dann z.B. möglich, List<int> list = new ArrayList<>(); (was intern auch ein int- und kein Object-Array benutzt) zu schreiben.

Ich hab nicht den kompletten Text gelesen, aber wäre das nicht ein Schritt mehr Richtung C++ Templates dann?

Prinzipiell hat man das “normale” Verhalten, nur eben auch für Primitive. Spannend ist der Abschnitt “User control over specialization”, der tatsächlich an C+±Templates erinnert. Das ist aber für die eigentliche Kernfunktionalität nicht notwendig, sondern nur das Sahnehäubchen, das eventuell nebenbei abfallen könnte. Und natürlich ist das Geschrei vorhersehbar, wenn man so eine Spezialisierung nur bei Primitiven hat, aber nicht zwischen verschiedenen Objekt-Typen - was natürlich “dank” Type-Erasure nicht funktionieren kann.

Erstmal ein Research Projekt, aber ein sehr interessantes. Was besonders interessant ist sind die vielen Probleme mit verschiedenen Basetypes. So ist List kein Subtype von List da int kein Subtype von Object ist im Gegensatz von Integer. Wenn man sich all die Probleme im Detail anschaut, versteht man wieso sie sich damals für diese krude Generics Implementierung entschieden haben.

Ich hoffe diesmal ist genug Zeit eine saubere Lösung zu finden.

Die Idee geistert schon eine Weile durchs Netz, teilweise auf Blogs bei denen man es trotz allem als nicht mehr als ein “Gedankenexperiment” bezeichnen konne. Aber jetzt scheint das ja konkreter zu werden. Eine etwas ausführlichere “Vorgänger”?version (hab’ sie zeitbedingt noch nicht gelesen) gibt’s auf http://cr.openjdk.java.net/~jrose/values/values-0.html

EDIT: Ahja, die Blogeinträge sind auch verlinkt: https://blogs.oracle.com/jrose/entry/value_types_in_the_vm und https://blogs.oracle.com/jrose/entry/tuples_in_the_vm

Jein die Value Types sind etwas anders aber sie sind der eigentliche Grund wieso man jetzt ernsthaft nach einer Lösung für die halbgaren Generics sucht, die Arrays 2.0 (http://cr.openjdk.java.net/~jrose/pres/201207-Arrays-2.pdf, ) übrigens auch :wink:

edit: Danke Marco für den Blogeintrag über Tuples, der ist mir irgendwie entgangen :slight_smile: