Java 9 by Alessio Stalla

10
JUG GENOVA 21-09-2016 @ MANYDESIGNS JAVA 9 Alessio Stalla [email protected] http://openjdk.java.net/projects/jdk9/ pagina del progetto con: Lista delle JEP (JDK Enhancement Proposals) di Java 9 Roadmap Mailing list Binari di prova (per Jigsaw: https://jdk9.java.net/jigsaw/)

Transcript of Java 9 by Alessio Stalla

JUG GENOVA 21-09-2016 @ MANYDESIGNS

JAVA 9

Alessio Stalla [email protected]

• http://openjdk.java.net/projects/jdk9/ pagina del progetto con:

• Lista delle JEP (JDK Enhancement Proposals) di Java 9

• Roadmap

• Mailing list

• Binari di prova (per Jigsaw: https://jdk9.java.net/jigsaw/)

JUG GENOVA 21-09-2016 @ MANYDESIGNS

JAVA 9

• Jigsaw

• modularizzazione della JDK

• modularizzazione opzionale del codice utente

• percorso di migrazione da classpath a module path

• http://openjdk.java.net/projects/jigsaw/spec/sotms/

• http://openjdk.java.net/projects/jigsaw/spec/issues/

JUG GENOVA 21-09-2016 @ MANYDESIGNS

JAVA 9

• A module is a named, self-describing collection of code and data.

• Il codice è organizzato in package contenenti classi…

• I dati sono le resources…

• …nulla di nuovo sotto il sole.

• Un modulo è dichiarato in module-info.java

• e compilato in module-info.class

• notare named ma non versioned

JUG GENOVA 21-09-2016 @ MANYDESIGNS

JAVA 9

• I moduli hanno dipendenze da altri moduli

• module com.foo.bar { requires org.apache.stuff; }

• I moduli possono esportare codice (package)

• module x { exports com.foo.pkg; }

• I tipi esportati sono solo quelli pubblici

• Un package può stare in un solo modulo

• I moduli sono caricati a partire dal module path

JUG GENOVA 21-09-2016 @ MANYDESIGNS

JAVA 9

• I moduli danno luogo ad artefatti

• JAR modulari (module-info.class)

• “JMOD” files (interni alla JDK, con codice nativo ecc.)

• moduli espansi in directory.

JUG GENOVA 21-09-2016 @ MANYDESIGNS

JAVA 9

• Alcune considerazioni più avanzate

• implied readability (requires public)

• ServiceLoader (uses, provides) - ad es. JDBC, Postgres driver

• Reflection permessa su tipi pubblici (esportati)

• qualified exports (export x to y)

• Layers

• Class loaders (in particolare platform)

JUG GENOVA 21-09-2016 @ MANYDESIGNS

JAVA 9

• Il grande mostro: compatibilità e migrazione dell’esistente

• Unnamed module (in realtà uno per classloader) che tutto legge e tutto esporta (ma non è accessibile dai named modules)

• Automatic modules JAR vecchio stile piazzati nel module path che danno luogo a moduli sintetici. Analogamente leggono ed esportano tutto e hanno implied readability.

JUG GENOVA 21-09-2016 @ MANYDESIGNS

JAVA 9

• Report dalla mailing list del progetto Jigsaw:

• Gran confusione!!!

• Il feature freeze della JDK 9 era previsto per marzo ma ancora si stanno discutendo e modificando aspetti chiave quali la reflection (weak modules)

• Critiche e richieste da Stephen Colebourne (Joda Time), persone di RedHat (JBoss), Jochen Theodorou (Groovy) ecc.

• I maggiori tool (Maven, Gradle) e linguaggi (Groovy, Nashorn) hanno dovuto subire pesanti adattamenti e non tutto funziona

JUG GENOVA 21-09-2016 @ MANYDESIGNS

JAVA 9

• L’opinione di Alessio: ennesimo aumento di complessità e stranezze

• “public is not public”

• setAccessible: boh?

• Java EE vs Java SE?

• Bootstrap/Platform/Extension class loader?

• Anche se avendo seguito la discussione siamo ad un compromesso molto più accettabile di qualche mese fa…

JUG GENOVA 21-09-2016 @ MANYDESIGNS

JAVA 9

• Other stuff

• jshell (Java REPL)

• VarHandles

• multi-release JARs

• jrt:// e jlink

• Deprecate le applet ;)

• altro…