Værdi-klasser på vej til Java og JVM

Oracle er på vej med længe ventet forslag om værdi-klasser i Java, som også skal understøttes af den virtuelle maskine.

Der har gået rygter om introduktionen af værdi-baserede klasser i Java i lang tid, og nu er Oracle på vej med et forslag. Det skriver Infoworld.

Eller rygter er måske så meget sagt, for dokumentationen til den nuværende version af Java nævner ligefrem begrebet, og peger på enkelte klasser i Javas biblioteker som kandidater for værdiklasser.

Værdiklasser er, som navnet peger på, klasser, hvis opgave er at repræsentere en værdi. I Javas dokumentation beskrives værdi-klasser således:

De kan ikke nedarves og er uforanderlige (men kan dog indeholde felter, der kan ændres), har ingen constructor, men bruger factory-metoder til at skabe nye instanser med, og hvis implementation af metoder som equals, hashCode og toString udelukkende bygger på klassens tilstand, hvilket vil sige felternes værdi.

Dokumentationen nævner klasser som java.util.Optional og java.time.LocalDateTime som værdi-klasser.

Andre objektorienterede sprog, såsom C#, har også værdiklasser, og nogle ser det som en tilbagevenden til structs og records i sprog som C og Pascal.

»Forslaget handler om at udviklerne får mulighed for at give køb på identitet og polymorfi, så kørselsmiljøet kan repræsentere de underliggende data på en meget mere kompakt facon, som passer bedre til store mængder af operationer,« udtaler Georges Saab, som er vice-chef for Java i Oracle til Infoworld.

Fler-kerne-verden kræver værdi-typer

Værdiklasserne er ikke bare en sproglig fornyelse i Java. Faciliteten skal også implementeres i den virtuelle maskine.

Behovet for værdiklasser ligger ifølge Oracle i overgangen til fler-kerne-computere. I forhold til den en-kernede verden, hvor tidsforbruget ved tilgang til hukommelsen og udførelse af CPU-instruktioner var sammenligneligt, er fler-kerne anderledes, ved at gøre CPU'er mere effektive, men til gengæld bliver adgang til hukommelsen mere bøvlet.

Et udkast til forslaget kan læses på OpenJDK-sitet. Der er ingen køreplan for implementering af forslaget endnu, men mange peger på Java 10 som kandidat. Den nuværende version af Java er otte.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (3)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
#2 Torben Mogensen Blogger

Det er mest umuterbare værdier (værdier, der ikke kan ændre værdi efter skabelse, og derfor kan kopieres frit), der er behov for i parallelle miljøer. Muterbare værdier, der er delt mellem flere processorer, kræver dyr synkronisering. Kopiering kræver ikke fælles delt lager (som ikke skalerer), men kan klares med lokalt lager og message passing.

I OO-sammenhæng vil umuterbare værdier svare til klasser med felter, der ikke kan modificeres efter konstruktionen af objektet, og hvor lighed er baseret på lighed mellem felternes værdier og ikke på lighed mellem objekternes adresser (selvom dette kan bruges som en optimering, da ens adresse medfører ens felter). Hvis et felt også er en umuterbar værdi, skal sammenligning gå ned i denne værdis felter. Det betyder, at sammenligning er rekursiv.

  • 0
  • 0
Log ind eller Opret konto for at kommentere