Java 9 by Alessio Stalla
-
Upload
jug-genova -
Category
Software
-
view
136 -
download
0
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…