Java Language Futures.
In een knappe presentatie van Brian Goetz, de Java Language Architect bij Oracle, werd er in de laatste sessie van Devoxx Antwerp 2017 nog een tipje van de sluier opgelicht: wat brengt de toekomst ons?
Om nog even te herhalen: Java 5 bracht ons generics, Java 7 implementeerde type-interferentie voor constructoren, Java 8 voegde lambdas toe en Java 9 heeft onder andere het modulesysteem (project Jigsaw) als meest in het oog springende feature.
Er zijn uiteraard verschillende langetermijnprojecten gaande voor de ontwikkeling van nieuwe Java features en verbeteringen. Dit zijn een aantal van de actieve projecten:
- Project Amber: een geheel van kleinere aanpassingen die de Java Syntax vereenvoudigen.
- Project Panama: een betere verbinding tussen de Java Virtual Machine en niet-Java API’s.
- Project Sumatra: voordeel halen uit de enorme rekenkracht van GPU’s en APU’s om bepaalde JVM-operaties te versnellen, zoals de parallelle verwerking van streams.
- Project Valhalla: gespecialiseerde datastructuren en generics om geheugen- gebruik te beperken.
- Project Loom: de implementatie van minder resource-intensieve threads, fibers genoemd.
De focus van deze presentatie lag op project Amber. Het doel is hier niet om radicale veranderingen te implementeren. Java stelt zich immers op als 'last mover': men gaat kijken naar andere programmeertalen en men gaat na welke toevoegingen succesvol zijn. Zo neemt men precies datgene over dat zijn nut bewezen heeft, op een manier die Java het beste past.
'Local-Variable Type Inference' is één van de nieuwe uitbreidingen in Java 10. Zo zal de compiler voor lokale variabelen in veel gevallen automatisch het type kunnen afleiden, wat code vereenvoudigt en typewerk reduceert. Hiervoor introduceert men het nieuwe 'var' sleutelwoord ter vervanging van het type in de declaratie van een lokale variabele.
Er gaat ook nog steeds aandacht naar het verminderen van zogenaamde 'boilerplate code', code die vaak herhaald - maar amper aangepast - wordt. Java heeft op dit vlak een ietwat kwalijke reputatie en 'data classes', weliswaar nog niet opgenomen in JDK 10, hebben als doel om het leed wat te verzachten. Dit wordt bereikt door een sterk vereenvoudigde definiëring van klassen die louter dienen om data te bevatten, aanleunend bij de 'data class' implementatie in de Kotlin programmeertaal.
Ten slotte worden ook switch statements veel flexibeler gemaakt door gebruik van een uitgebreid systeem voor patroonherkenning op basis van constanten, types, deconstructiepatronen en wildcards. Deze patronen kunnen vervolgens genest worden om foutgevoelige copy-paste code te reduceren.