Nu får Java lambda-udtryk til at gøre parallel programmering lettere

27. marts 2014 kl. 10:114
Nu får Java lambda-udtryk til at gøre parallel programmering lettere
Illustration: Jesper Stein Sandal.
Muligheden for at kunne bruge lambda-udtryk uden krumspring har længe stået højt på Java-udviklernes ønskeliste. Nu står det også øverst i Java 8.
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

Oracle har nu officielt frigivet den nyeste udgave af Java-platformen, som ifølge selskabet selv er den største i form af nye funktioner i mange år, efter Java 7 især blev brugt til at rydde op i platformen.

Det betyder, at Oracle blandt andet har knækket koden til at få gjort de såkaldte lambda-udtryk til en del af selve Java 8-platformen.

Lambda-udtryk er et koncept med rødder helt tilbage til før de første elektroniske computere, men de har de seneste år fået en renæssance, fordi de både kan give objektorienterede sprog som Java en let måde at skrive små funktioner på og en måde at lave programmering til parallel databehandling.

»Vi har integreret lambda-udtryk, så det fungerer glat sammen med Javas objektorienterede rødder. Det har ikke været nogen lille udfordring«, siger Georges Saab, underdirektør med ansvar for Java-platformen hos Oracle, til Version2.

Artiklen fortsætter efter annoncen

Lambda-udtryk er en anden måde at lave funktionskald på, end den objektorienterede model, som Java hidtil har benyttet og som fortsat vil være den primære måde at programmere i Java. Lambda-udtryk findes i en række andre programmeringssprog, eksempelvis Microsofts .Net og C#, og det var oprindeligt planlagt, at lambda-udtryk og de beslægtede closures skulle have været med allerede i Java 7.

Det blev imidlertid droppet, men nu er både lambda-udtryk og closures altså med i Java 8.

»Vi ønsker at gå forsigtigt frem og så tilføje mere funktionalitet senere, så vi kommer til at se en løbende udvikling. Det her er heller ikke vores første forsøg på lambda-udtryk«, siger Georges Saab.

Lambda-udtryk kan blandt andet bruges til at lave applikationer, som kan arbejde parallelt, og her har det været vigtigt, at lambda-udtryk i Java ikke på samme måde som programmering med tråde lagde det meste af byrden på udvikleren, men i stedet lod Javas virtuelle maskine gøre det grove arbejde.

Artiklen fortsætter efter annoncen

»I den første version var ydelsen udmærket, men det skalerede ikke, som vi gerne ville have det. Nu synes vi, det er rigtig godt, men der er stadig plads til forbedring«, siger Georges Saab.

Da lambda-udtryk er en tilføjelse til Java, har det også været vigtigt at gøre det på en måde, så det kunne bruges til at udvide allerede skrevne Java-applikationer uden at skulle skrive sin kode helt om.

Ud over understøttelsen af lambda-udtryk, så har Java 8 også fået den nye Javascript-motor Nashorn og et helt nyt API til tid og dato.

Desuden er der nu rettet ind mellem de to udgaver Java SE 8 og Java ME 8, så ME-versionen blot er en delmængde af SE-udgaven.

ME er beregnet til helt små apparater som eksempelvis intelligente termostater, mens den nye Java SE 8 Embedded er beregnet til lidt større enheder som eksempelvis en Raspberry Pi.

4 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
4
28. marts 2014 kl. 13:30

Jeg blev lige lidt forvirret da der stod:

</p>
<p>Ud over understøttelsen af lambda-udtryk, så har Java 8 også fået den nye Javascript-motor Nashorn og et helt nyt API til tid og dato.

Jeg tænkte om de mon havde fået forvirret Java og Javascript som man så ofte ser online, men efter lidt søgning, så viser det sig at Java faktisk har en Javascript motor som kan afvikle javascript gennem

  1. javax.script

(Se følgende: http://openjdk.java.net/jeps/174 )

Der står bl.a. også

Support will be provided for invoking Java code from JavaScript and for Java to invoke JavaScript code. This includes direct mapping to JavaBeans.

Det virker da som en meget fed feature når man tænker over det :)

2
27. marts 2014 kl. 11:44

"Over time, every language evolves to look more and more like ML".

Det gælder i hvert fald både Java og C#: De har fået eller får tilføjet polymorfi (generics), lambda-udtryk og typeinferens.

Men fordi de pågældende features er blevet boltet på sproget i stedet for at være med fra starten, har de nogle mærkelige begrænsninger. Tues link nævner for eksempel nogle begrænsninger om variabelfangst i closures, og typeinferens er meget lokal.

Og så mangler der stadig nogle af de vigtige ting fra ML: Generiske tupler, rekursive sumtyper ("datatype" nøgleordet), mønstergenkendelse og ikke-nullable referencetyper.

Ikke dermed sagt, at ML er perfekt. Den seneste standard er fra 1997, så der kunne godt moderniseres lidt. F.eks. mangler ordentlig Unicode support, og jeg kunne godt tænke mig typeklasser i stil med Haskell, types-and-effects for at gøre effekter synlige i typerne (evt. bare begrænset til "pure" og "impure"), samt lineære typer (se f.eks. Rust).

3
27. marts 2014 kl. 14:18

Jeg syntes det er dejligt at ting ikke går så stærkt i IT branchen, hver gang der kommer nye sprog (eller andet) kan man jo bare tage det roligt, og nyde gentagelsen :)

Jeg var meget nervøs for C++ og dennes lambda, men det har vist sig at være system programmørens drøm, med fuld control over closures så alting giver smuk mening. Jeg sender ofte en varm tanke til Bjarne S. for at han holder til i kort snor.

Nu kan vi bruge de samme abstraktioner i både Javascript, C++, ML (og alle dens børn) også hvis vi skal kode lidt til en Android platform i java. Man skal bare passe på at man ikke tror java har samme lempelige forhold til closures som Javascript eller ML :-)