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.

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.

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:

--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:

String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;

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:

String query = """
               SELECT EMP_ID, LAST_NAME 
               FROM EMPLOYEE_TB
               WHERE CITY = INDIANAPOLIS
               ORDER BY EMP_ID, LAST_NAME;
               """;
 
ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
Object obj = engine.eval("""
                         function hello() {
                             print('"Hello, world"');
                         }
 
                         hello();
                         """);

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:

int j = switch (day) {
    case MONDAY  -> 0;
    case TUESDAY -> 1;
    default      -> {
        int k = day.toString().length();
        int result = f(k);
        yield result;
    }
};

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:

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:
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.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (10)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Tania Andersen 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-skale...

Sådan fjerner du Oracles Java og installerer OpenJDK
https://www.version2.dk/artikel/saadan-fjerner-du-oracles-java-installer...

Mvh Tania/V2

Log ind eller Opret konto for at kommentere