Her er Java 13: Ny tekst på blokken og nem og hurtig opstart

14. juni 2019 kl. 05:0910
Her er Java 13: Ny tekst på blokken og nem og hurtig opstart
Illustration: Bigstock/kentoh.
Strenge, der løber over flere linjer, og nemme arkiver, der giver hurtigere opstart, er blandt nyhederne i den næste udgave af Java.
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

Sommeren er over os, og dermed er det tid til en ny omgang Java. Den kommende version hedder nummer 13, og ligesom forgængeren er det en slank opdatering.

Den store nyhed er ‘text blocks’ - streng-konstanter, der løber over flere linjer, som det kendes fra mange andre sprog.

Denne funktion er især god til Oracles GraalVM, der kommer med understøttelse af sprog som Python og Javascript, men i C-baserede udgaver, i modsætning til JVM-implementeringer af sprogene.

Med Graal kan kode i disse sprog kaldes fra Java-kode uden yderligere krumspring, og det ser pænest ud, hvis det kan gøres med en facilitet, hvor en streng kan løbe over flere linjer i kildekoden.

Artiklen fortsætter efter annoncen

Det passer også ind i Oracles strategi om 'Java first', hvor sproget skal moderniseres, så det kan måle sig med ungdommelige publikumsfavoritter som Kotlin og Swift.

Faciliteten skulle have været med i tolveren, men bagmand Brian Goetz sprang fra i sidste øjeblik, da han ikke var helt tilfreds med detaljerne i sit eget forslag.

Men nu er den altså ankommet i en såkaldt ‘preview’-udgave, hvor compileren skal udstyres med flaget:

  1. --enable-preview --release 13

– for at benytte de nye muligheder. I en senere udgave vil faciliteten blive fastfrosset, og så er flaget ikke længere nødvendigt.

Den nye mulighed benytter tre citationstegn, ligesom i Python, Groovy, Kotlin, Scala og Swift, til at afgrænse strengen:

  1. String html = """
  2. <html>
  3. <body>
  4. <p>Hello, world</p>
  5. </body>
  6. </html>
  7. """;

Det er som tidligere nævnt især indlejret kode fra andre miljøer, der bliver nemmere at læse, når linjeskift og citationstegn ikke længere skal ‘escapes’, som i disse to eksempler:

  1. String query = """
  2. SELECT EMP_ID, LAST_NAME
  3. FROM EMPLOYEE_TB
  4. WHERE CITY = INDIANAPOLIS
  5. ORDER BY EMP_ID, LAST_NAME;
  6. """;
  7.  
  8. ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
  9. Object obj = engine.eval("""
  10. function hello() {
  11. print('"Hello, world"');
  12. }
  13.  
  14. hello();
  15. """);

Som det sidste eksempel viser, kan citationstegn også benyttes inde i tekstblokken.

Javas compiler fjerner de foranstillede blanktegn, så linjerne antages at starte ud fra positionen af det indledende """.

Switch med yield

Den anden sprognyhed er en mindre ændring af den nye switch-sætning, som blev introduceret i version 12. Her kan en kodeblok returnere en værdi fra en case, og i forrige udgave - som også var et ‘preview’, der altså giver mulighed for mindre ændringer - blev syntaksen break værdi benyttet. Det er skiftet ud med en ny yield-sætning:

  1. int j = switch (day) {
  2. case MONDAY -> 0;
  3. case TUESDAY -> 1;
  4. default -> {
  5. int k = day.toString().length();
  6. int result = f(k);
  7. yield result;
  8. }
  9. };

Yield er et pirrende valg, da det i mange andre sprog også benyttes i såkaldte generators, som er en metode, der kan fungere som en iterator. Men Javas bud på en fremtidig facilitet i den dur, nemlig continuations, nævner ikke et kvæk om yield, så måske skal man ikke forvente mere på den front.

Hurtig opstart med nemme arkiver

Blandt andre nyheder er en nyskrivning af Socket-api’erne, som er Javas netværksgrænseflade på det lave niveau. De er skrevet om fra bunden af med Javas nio-biblioteker til ikke-blokerende ind- og uddata, blandt andet for at gøre det nemmere at vedligeholde koden.

En anden nævneværdig nyhed er Dynamic CDS Archives, som bygger videre på Application Class-Data Sharing (CDS), der kom til i Java 10.

Den facilitet gør det muligt at gennemtygge en applikations klasser, så opstartstiden nedsættes. Specielt i forbindelse med ‘serverless’ sky-systemer skulle dette nedsætte opstartstider og give en reduktion af hukommelsesforbrug på op til hundredvis af megabytes pr. JVM-proces.

Sådan et arkiv kan nu nemt skabes med denne kommando:

  1. java -XX:ArchiveClassesAtExit=hello.jsa -cp hello.jar Hello

Her genereres et CDS-arkiv i filen hello.jsa. Når applikationen køres en anden gang, indlæses arkivet med kommandoen:

  1. java -XX:SharedArchiveFile=hello.jsa -cp hello.jar Hello

– og det skulle altså give ydelsesmæssige forbedringer.

Selvom nyhederne kan synes lidt tynde i denne omgang, så er der masser af spændende sager på vej til Java. Project Loom vil implementere letvægtstråde, som det kendes fra eksempelvis Erlang, og så er der en lang liste af kandidater til ændringer, der ikke nåede Java 13-toget. Mon ikke nogle af dem dukker op i fremtidige versioner.

Java 13 blev fastfrosset i går torsdag, og kun mindre ændringer accepteres fremover. Det færdige produkt løber af stablen i midten af september. Tidlige builds kan downloades fra projektets hjemmeside.

10 kommentarer.  Hop til debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
10
18. juni 2019 kl. 10:39

Hvad sker der så hvis man bruger tabs? Eller bruger en kombination af tabs og mellemrum? Hvordan håndteres dette?

9
17. juni 2019 kl. 08:30

Hvis det er rigtig vil i eksemplet EMPLOYEE_TBWHERE blive skrevet som et ord, ubrugeligt. Sikrer et linjeskift ikke mindst et mellemrum?

Nej, men linjeskift bevares jo til gengæld, så der vil være et linjeskift mellem TB og WHERE.

8
17. juni 2019 kl. 06:08

I artiklen: "Javas compiler fjerner de foranstillede blanktegn, så linjerne antages at starte ud fra positionen af det indledende """"

Hvis det er rigtig vil i eksemplet EMPLOYEE_TBWHERE blive skrevet som et ord, ubrugeligt. Sikrer et linjeskift ikke mindst et mellemrum?

7
15. juni 2019 kl. 10:34

Jeg tror ved nærmere eftertanke at du har ret.

6
15. juni 2019 kl. 10:10

Jeg mener nu, at det mest var Java i browseren, der var problematisk, og ikke Java på maskinen som sådan.

Husker jeg forkert?

5
15. juni 2019 kl. 09:54

Jeg mener bare at java var den største sikkerhedstrussel man kunne ha' på sin Pc og alle afinstallerede det.

Husker jeg forkert?

4
14. juni 2019 kl. 19:21

Hvis du er træt af Java som sprog kan du snildt bruge et andet sprog som f.eks. Kotlin, som er et forholdvis nyt og moderne sprog. Kotlin kan køre på Java Virtual Machine og kan køre sammen med alm. Java kode.

3
Journalist -
14. juni 2019 kl. 16:36
Journalist

OpenJDK udgives under GPL-licensen. Der er efterhånden flere muligheder at vælge imellem og vi har tidligere kigget lidt på dem her:

Alibaba lancerer egen Java til 'ekstrem skalering'https://www.version2.dk/artikel/alibaba-lancerer-egen-java-ekstrem-skalering-1087906

Sådan fjerner du Oracles Java og installerer OpenJDKhttps://www.version2.dk/artikel/saadan-fjerner-du-oracles-java-installerer-openjdk-1086444

Mvh Tania/V2

2
14. juni 2019 kl. 16:00

Kommer de her ting også i open source udgaven, eller begynder Oracle at lave en lock in, så man er nødt til at betale licens til dem?

1
14. juni 2019 kl. 11:00

Skal man ikke udgå java eller er der sket en udvikling? Jeg indrømmer at jeg ikke rigtig har fuldt med på javafronten i nogen tid

Peter