SYLVAIN MOUGENOT•Sylvain.Mougenot@gmail.com•14 ans avec Java2•https://github.com/smougenot/
Sur la route de Java1995JDK Beta1996JDK 1.01997JDK 1.11998JDK 1.22000JDK 1.32002JDK 1.42004JDK 52006JDK 6EOL : 2013/023201...
Des versions régulières- SE tous les 2 ans- EE tous les 2 ansUne règle du jeu claireSur la route de JavaUne règle du jeu c...
Objectifs- Simplification- Productivité- Moderniser le language- Moderniser la plateformeS’adapter aux usagesSur la route ...
Java est partoutSur la route de JavaMac OS X Linux ARM Java Card6HTTP://WWW.APPLE.COM/ HTTP://WWW.RASPBERRYPI.ORG/
SE8- Septembre 2013- Lambda- Nashorn- Dates- Annotations- JavaFx- OptimisationsSE8- OptimisationsEvolution majeureMigratio...
SE89λ
Evolution du language- Closure façon java- Limité à la notion d’interface fonctionnelle- Implémentation par défaut d’une m...
SE8 : λRunnable ditBonjour = new Runnable() {@Overridepublic void run() {System.out.print("Bonjour");}};11Runnable ditBonj...
SE8 : λpublic interface Maximum<T extends Number>{T max(T a, T b );}Maximum<Integer> maxL1 = (Integer a, Integer b) -> { r...
SE8 : λpublic interface Taille<T extends CharSequence>{int taille(T text);boolean estVide(T text);13}Taille<String> taille...
default boolean estVide(T text){return 0 == taille(text);}SE8 : λpublic interface Taille<T extends CharSequence>{int taill...
SE8 : λ@FunctionalInterfacepublic interface Taille<T extends CharSequence>{int taille(T text);default boolean estVide(T te...
Evolution majeure des collections- Parallélisation, « lazyness »Package java.util.streams- Construction de pipelines d’opé...
SE8 : λclass Developpeur{String nom; int anneeEmbauche; int nbProjets;}...int maxPrj = 0;for (Developpeur d : devs){if(d.a...
Stream<T>SE8 : λStream<T> filter(Predicate<? super T> predicate);<R> Stream<R> map(Mapper<? extends R, ? super T> mapper);...
FunctionalInterfaceRunnableComparableComparatorIterableFileFilterjava.util.function.*SE8 : λjava.util.function.*BinaryOper...
JavaScriptv-languageFunnelMiniLispDroolsGJythonBex ScriptJudoScriptTigerRexxSchemeTermWareTeaFScriptPascalLuckScala Sather...
SE8 : NashornAjout d’un language dynamique- Valide « invoke dynamic »- Ajoute une implémentation performante de JS- ECMA S...
SE8 :23
Besoin de Refonte de l’API- Non intuitive- Cause de bug- Pas de sémantiques ex: pas de durée- …SE8 : Date24
BEURK !!!SE8 : Dateint year = 2013 - 1900;int month = 3 - 1;Date date = new Date(year, month, 19, 10, 50);TimeZone zone = ...
Refonte- L’ancienne API est intégrée- java.util.Date, java.util.Calendar, …- Sémantique claire- Instant, durée, année, jou...
SE8 : DateLocalDateTime.of(2013, 3, 19, 10, 50);ZonedDateTime.of(2013, 3, 19, 10, 50, 0, 0, TimeZone.of("Asia/Hong_Kong"))...
SE8 : DateInstantDurationLocalDateLocalTimeLocalDateTimeZonedDateTime28YearMonthMonthDayYearMonthOfYearDayOfWeek
Œuf coqueSE8 : Dateint tempsCuisson = 3 * 60 * 1_000;long fin = System.currentTimeMillis() + tempsCuisson;//boucle dattent...
Détecter une dateSE8 : DateCalendar cible = Calendar.getInstance();cible.set(DAY_OF_MONTH, 31);cible.set(MONTH, DECEMBER);...
SE8 :31@
Annotations de type- Renforcer le typage- Documenter, renforcer les contrôles à la compilation- Pouvoir placer des annotat...
Mettre des annotations partoutSE8 : Annotation de typeString myStr = (@NonNull String) myObject;List<@Immutable T> myList ...
SE8 : Annotation@JoinColumns({@JoinColumn(name="ADR_CODE", referencedColumnName="CODE"),@JoinColumn(name="ADR_CP", referen...
SE8 : Annotation@Target({METHOD, FIELD})@Retention(RUNTIME)@ContainerFor(JoinColumn.class)public @interface JoinColumns {J...
- Webview- Html5 javascriptSE8- Html5 javascript- 3d- Scene builder 2- Démo sous IOS, Android36
OptimisationsSE837
Disparition du perm gen space- Simplification du tuning- Changement à chaud- Mais un MetaSpaceDéfinition de profils pour l...
ça ne vous suffit pas ?- Sumatra- Utiliser la carte graphique pour les calculs- Client http- G1 amélioré- Faire plus sans ...
Java EE7 Avril 2013http://java.net/projects/javaee-spec/pages/HomeJava se8 Septembre 2013http://openjdk.java.net/projects/...
201303 - Java8
201303 - Java8
201303 - Java8
Prochain SlideShare
Chargement dans…5
×

201303 - Java8

512 vues

Publié le

Publié dans : Technologie, Formation
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
512
Sur SlideShare
0
Issues des intégrations
0
Intégrations
96
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

201303 - Java8

  1. 1. SYLVAIN MOUGENOT•Sylvain.Mougenot@gmail.com•14 ans avec Java2•https://github.com/smougenot/
  2. 2. Sur la route de Java1995JDK Beta1996JDK 1.01997JDK 1.11998JDK 1.22000JDK 1.32002JDK 1.42004JDK 52006JDK 6EOL : 2013/0232011JDK72013JDK82015JDK9EOL : 2013/02
  3. 3. Des versions régulières- SE tous les 2 ans- EE tous les 2 ansUne règle du jeu claireSur la route de JavaUne règle du jeu claire- Un contenu prévu mais pas impératif- Un report des contenus en retard4
  4. 4. Objectifs- Simplification- Productivité- Moderniser le language- Moderniser la plateformeS’adapter aux usagesSur la route de Java- Cloud- Embarqué- Internet des objets- Cycles courts5
  5. 5. Java est partoutSur la route de JavaMac OS X Linux ARM Java Card6HTTP://WWW.APPLE.COM/ HTTP://WWW.RASPBERRYPI.ORG/
  6. 6. SE8- Septembre 2013- Lambda- Nashorn- Dates- Annotations- JavaFx- OptimisationsSE8- OptimisationsEvolution majeureMigration transparente8
  7. 7. SE89λ
  8. 8. Evolution du language- Closure façon java- Limité à la notion d’interface fonctionnelle- Implémentation par défaut d’une méthode dans une interface- Refonte des API- ParallélisationSE8 : λImpact profond dans la plateforme- Introduction de nouveautés dans le bytecodePour en savoir plus- http://cr.openjdk.java.net/~briangoetz/lambda/sotc3.html10
  9. 9. SE8 : λRunnable ditBonjour = new Runnable() {@Overridepublic void run() {System.out.print("Bonjour");}};11Runnable ditBonjourL = () -> System.out.print("Bonjour");
  10. 10. SE8 : λpublic interface Maximum<T extends Number>{T max(T a, T b );}Maximum<Integer> maxL1 = (Integer a, Integer b) -> { return Math.max(a, b); };Maximum<Integer> maxL2 = (a, b) -> { return Math.max(a, b); };Maximum<Integer> maxL3 = (a, b) -> Math.max(a, b);12Maximum<Integer> maxL3 = (a, b) -> Math.max(a, b);Maximum<Integer> maxL4 = Math::max ;
  11. 11. SE8 : λpublic interface Taille<T extends CharSequence>{int taille(T text);boolean estVide(T text);13}Taille<String> taille = text -> text.length();
  12. 12. default boolean estVide(T text){return 0 == taille(text);}SE8 : λpublic interface Taille<T extends CharSequence>{int taille(T text);14}Taille<String> taille = text -> text.length();
  13. 13. SE8 : λ@FunctionalInterfacepublic interface Taille<T extends CharSequence>{int taille(T text);default boolean estVide(T text){return 0 == taille(text);}15}Taille<String> taille = text -> text.length();
  14. 14. Evolution majeure des collections- Parallélisation, « lazyness »Package java.util.streams- Construction de pipelines d’opérations : filter map reduceSE8 : λD’autres API vont utiliser ces extensions16
  15. 15. SE8 : λclass Developpeur{String nom; int anneeEmbauche; int nbProjets;}...int maxPrj = 0;for (Developpeur d : devs){if(d.anneeEmbauche > 2010){17if(d.anneeEmbauche > 2010){maxPrj = Math.max(maxPrj, d.nbProjets);}}int maxPrj =devs.stream().filter(d -> d.anneeEmbauche > 2010).map(d -> d.nbProjets).reduce(0, Math::max);.parallelStream()
  16. 16. Stream<T>SE8 : λStream<T> filter(Predicate<? super T> predicate);<R> Stream<R> map(Mapper<? extends R, ? super T> mapper);T reduce(T base, BinaryOperator<T> op);Stream<T> sorted(Comparator<? super T> comparator);Stream<T> cumulate(BinaryOperator<T> operator);19Optional<T> findFirst();Optional<T> findAny();boolean anyMatch(Predicate<? super T> predicate);boolean allMatch(Predicate<? super T> predicate);boolean noneMatch(Predicate<? super T> predicate);...
  17. 17. FunctionalInterfaceRunnableComparableComparatorIterableFileFilterjava.util.function.*SE8 : λjava.util.function.*BinaryOperatorFunctionPredicateorg.springframework.jdbc.core.ResultSetExtractororg.springframework.jdbc.core.StatementCallback20
  18. 18. JavaScriptv-languageFunnelMiniLispDroolsGJythonBex ScriptJudoScriptTigerRexxSchemeTermWareTeaFScriptPascalLuckScala SatherfooAdaiScriptOberonJRubyDawnForthZigzagC#BeanShellCAL+SE8 : NASHORN21| Copyright © 2011, Oracle and/or its affiliates. All rights reserved.ClojureTclLogoJHCRPrologLLPJESSEiffelSmalltalkCorrelateSleepSimkinWebLProcessing IconModula-2EPresentBasicHojoPHPJicklePiccolaPLANObjectScriptiScriptSALSAOberonPhobosGroovyYasslNiceYoixAnvilPnuts
  19. 19. SE8 : NashornAjout d’un language dynamique- Valide « invoke dynamic »- Ajoute une implémentation performante de JS- ECMA Script 262- Remplace rhinoFait parti du projet « Multi Language VM »22- Continuera sur SE9
  20. 20. SE8 :23
  21. 21. Besoin de Refonte de l’API- Non intuitive- Cause de bug- Pas de sémantiques ex: pas de durée- …SE8 : Date24
  22. 22. BEURK !!!SE8 : Dateint year = 2013 - 1900;int month = 3 - 1;Date date = new Date(year, month, 19, 10, 50);TimeZone zone = TimeZone.getTimeZone("Asia/Hong_Kong");Calendar cal = new GregorianCalendar(zone);cal.setTime(date);25DateFormat fm = new SimpleDateFormat("yyyy/MM/dd HH:mm Z");fm.setTimeZone(zone);Date calDate = cal.getTime();String str = fm.format(calDate);System.out.printf("La date est %sn", str);
  23. 23. Refonte- L’ancienne API est intégrée- java.util.Date, java.util.Calendar, …- Sémantique claire- Instant, durée, année, jour du mois, … seconde de la minute,…- Manipulation naturelle- Ex : Ajout entre les types, accès direct aux éléments d’uneSE8 : Date- Ex : Ajout entre les types, accès direct aux éléments d’unedate- Immuable et threadsafe- Déjà disponible (RI)- https://github.com/ThreeTen/threeten26
  24. 24. SE8 : DateLocalDateTime.of(2013, 3, 19, 10, 50);ZonedDateTime.of(2013, 3, 19, 10, 50, 0, 0, TimeZone.of("Asia/Hong_Kong"));27
  25. 25. SE8 : DateInstantDurationLocalDateLocalTimeLocalDateTimeZonedDateTime28YearMonthMonthDayYearMonthOfYearDayOfWeek
  26. 26. Œuf coqueSE8 : Dateint tempsCuisson = 3 * 60 * 1_000;long fin = System.currentTimeMillis() + tempsCuisson;//boucle dattente...if(System.currentTimeMillis()>fin){//cest prêt29//cest prêt} ...Duration tempsCuisson = Duration.ofStandardMinutes(3);Instant fin = Instant.now().plus(tempsCuisson);//boucle dattente...if(Instant.now().isAfter(fin)){//cest prêt} ...
  27. 27. Détecter une dateSE8 : DateCalendar cible = Calendar.getInstance();cible.set(DAY_OF_MONTH, 31);cible.set(MONTH, DECEMBER);Calendar aujourdhui = Calendar.getInstance();if ( aujourdhui.get(MONTH) == cible.get(MONTH)&&30&&aujourdhui.get(DAY_OF_MONTH) == cible.get(DAY_OF_MONTH)) {// cest le jour J}MonthDay cible = MonthDay.of(12, 31);if(cible.equals(MonthDay.now())){// cest le jour J}
  28. 28. SE8 :31@
  29. 29. Annotations de type- Renforcer le typage- Documenter, renforcer les contrôles à la compilation- Pouvoir placer des annotations sur toute utilisation de type- Ajout de plugins pour le compilateur- Détection de bug- Plusieurs plugins existent- http://types.cs.washington.edu/checker-framework/SE8 : Annotation- http://types.cs.washington.edu/checker-framework/32
  30. 30. Mettre des annotations partoutSE8 : Annotation de typeString myStr = (@NonNull String) myObject;List<@Immutable T> myList ;class Folder<F extends @Existing File> { ... }33@Immutable Date date = new Date(0);date.setTime(70); // erreur de compilationjavac -processor MyChecker *.java+AMÉLIORER LE CODE EN AJOUTANT DE LA VÉRIFICATION
  31. 31. SE8 : Annotation@JoinColumns({@JoinColumn(name="ADR_CODE", referencedColumnName="CODE"),@JoinColumn(name="ADR_CP", referencedColumnName="CP")})private Address address;34@JoinColumn(name="ADR_CODE", referencedColumnName="CODE")@JoinColumn(name="ADR_CP", referencedColumnName="CP")private Address address;
  32. 32. SE8 : Annotation@Target({METHOD, FIELD})@Retention(RUNTIME)@ContainerFor(JoinColumn.class)public @interface JoinColumns {JoinColumn[] value();}35@Target({METHOD, FIELD})@Retention(RUNTIME)@ContainedBy(JoinColumns.class)public @interface JoinColumn { ... }
  33. 33. - Webview- Html5 javascriptSE8- Html5 javascript- 3d- Scene builder 2- Démo sous IOS, Android36
  34. 34. OptimisationsSE837
  35. 35. Disparition du perm gen space- Simplification du tuning- Changement à chaud- Mais un MetaSpaceDéfinition de profils pour la JVMSE8 : OptimisationSDéfinition de profils pour la JVM- Limiter l’empreinte du runtime Java- Convergence ME SE- En attendant la modularisation- http://openjdk.java.net/jeps/161Flight Recorder- Enregistreur de bord pour java38
  36. 36. ça ne vous suffit pas ?- Sumatra- Utiliser la carte graphique pour les calculs- Client http- G1 amélioré- Faire plus sans full GC- Améliore l’inférence de type- Chainage, à l’intérieur de l’appel d’une méthodeSE8- Chainage, à l’intérieur de l’appel d’une méthode- Encodages- Crypto- … plus de 40 points- Sur plus de 70 dans le JEP (Jdk Enhancement Proposal)39
  37. 37. Java EE7 Avril 2013http://java.net/projects/javaee-spec/pages/HomeJava se8 Septembre 2013http://openjdk.java.net/projects/jdk8/RessourcesJava se9 2015Java EE8 201540MERCI

×