URL: https://linuxfr.org/users/galaux/journaux/le-point-sur-java-7 Title: Le point sur Java 7 Authors: Guillaume ALAUX Date: 2010年04月16日T13:17:48+02:00 Tags: Score: 14 Pour les développeurs Java, les nouveautés que réserve SUN pour les prochaines versions de son langage Orienté Objet sont autant de sujets d'attentes, de débats, et même pour certains ... d'espoirs ! Beaucoup a été dit et surtout bloggué depuis le lancement du projet Java 7 "Dolphin", les échanges ont été nombreux et le débat fourni. À l'heure où la sortie de cette dernière mouture de Java est imminente, faisons le point sur le sujet et tout particulièrement sur le projet [Coin](http://openjdk.java.net/projects/coin/) de SUN et des améliorations qu'il apporte à Java 7. Plusieurs chantiers majeurs d'évolutions ont donc été lancés en interne autour d'OpenJDK. Mais SUN a aussi voulu intégrer la communauté Java dans le projet pour prendre en compte le retour d'expérience des utilisateurs quotidiens de sa plate-forme. À cet effet, SUN a initié le projet Coin dans le but de lister les "petites" améliorations qui pourraient être intégrées. SUN a donc misé sur le débat ouvert puisqu'il était permis à tous de soumettre ses idées d'évolution. Et le moins que l'on puisse dire est que ce "projet autour du projet" a porté ses fruits puisque ce n'est pas moins de 70 propositions qui ont été soumises (voir [cet article du blog d'Alex Miller](http://tech.puredanger.com/java7) qui en a fait une liste exhaustive et documentée). S'en est suivie une longue période de débats, mais après quelques rebondissements de dernière minutes, nous connaissons (enfin) les 5 propositions de la communauté qui ont été retenues : * Possibilité d'utiliser des String dans les switch Tout développeur Java s'est déjà retrouvé dans l'impossibilité d'utiliser des chaînes de caractères dans les structures switch. Cette fonctionnalité bien pratique existait depuis longtemps dans bien des langages et ce sera bientôt chose faite pour Java. * Gestion automatique des ressources La mémoire est gérée automatiquement en Java et cela dans le but de soulager le développeur dans le développement d'applications haut niveau. Cependant cela n'était pas le cas des autres ressources comme les documents qu'il fallait ouvrir, et surtout, fermer à la main. Cette amélioration de Java 7 vise à automatiser cette gestion même s'il est peu probable que l'on en arrive au niveau de gestion de la mémoire. * Amélioration des instanciations génériques Voici une nouveauté qui ne sera en fait qu'une simplification d'écriture dans le but d'alléger le code. Il ne sera désormais plus nécessaire de spécifier le type des éléments de listes génériques lors de la déclaration ET de l'allocation, celle-ci devenant évidente. Voici un exemple avec la syntaxe actuelle : List liste = new ArrayList(); Java 7 permettra d'écrire : List liste = new ArrayList(); * Simplification des varargs Voici une autre modification qui a pour but de simplifier la vie du développeur sans pour autant apporter de grande nouveauté. En l'occurrence l'emploi du code suivant qui était jusqu'alors sujet au warning "uses unchecked or unsafe operations". static List asList(T... elements) { ... } static List stringFactories() { £spaces£ £/spaces£Callable a, b, c; £spaces£ £/spaces£... £spaces£ £/spaces£*// Warning: **"uses unchecked or unsafe operations"* £spaces£ £/spaces£return asList(a, b, c); } * Support de langages de script Un des sujets d'attentes était la possibilité d'intégrer des langages de script comme le Ruby et le Python dans la JVM. C'est désormais le cas via la JSR 292 (Java Specification Request). Ceci est expliqué plus en détail dans [ce mail d'archive](http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/001131.html) de la mailing list du projet Coin. * Closures ou non? Comme expliqué plus haut dans l'article, des évènements de dernières minutes sont venus créer des remous dans la communauté Java. Beaucoup de membres espéraient en effet que la proposition d'intégration des [Closure](http://fr.wikipedia.org/wiki/Fermeture_%28informatique%29) allait être acceptée. Cependant celles-ci ne figuraient pas dans la liste des améliorations retenues par le projet Coin pour Java 7. Rebondissement lors de la conférence Devoxx 2009 : Mark Reinhold, ingénieur chez SUN sur le projet OpenJDK [annonçait finalement leur acceptation](http://www.jroller.com/scolebourne/entry/more_detail_on_closures_in). Depuis aucune information n'est venue confirmer ou infirmer ce dernier commentaire. Pour mémoire, les closures, qui existent déjà dans nombre de langages comme le C++, sont des sous-fonctions définies dans le corps de fonctions et qui portent sur les variables locales de cette fonction. Comme on peut le voir, les nouveautés apportées par le projet Coin pour Java 7 sont principalement d'ordre esthétique mais ce sont aussi ces détails qui facilitent le quotidien du développeur. À noter que nombre de propositions plus "de fond" n'ont pas été retenue comme par exemple l'autorisation des multi-catch pour gérer plusieurs types d'exceptions en une fois. SUN développe aussi des efforts en direction des performances de la JVM comme en témoigne [ce projet de compression des adresses des pointeurs 64 bits](http://wikis.sun.com/display/HotSpotInternals/CompressedOops). Mais une amélioration plus intéressante encore se situe au niveau du Garbage Collector, l'outil de libération mémoire des objets du développeur. Le nouveau Garbage Collector "[Garbage First G1](http://tech.puredanger.com/2008/05/09/javaone-g1-garbage-collector)" devrait passer moins de temps en pause et ainsi d'améliorer l'efficacité de la JVM. Espérons que ces promesses se réaliseront : le Garbage Collector joue un rôle sensible et est souvent un acteur majeur dans nombre de cas d'applications aux performances déteriorées. Dans la veine de ces améliorations, citons aussi le classloader et la concurrence dans les accès IO qui devraient être revus ainsi qu'une bonne partie du chapitre 2D des applications client léger Java. Autre grande nouveauté du langage Java à proprement parler : la possibilité d'[annoter les types](http://openjdk.java.net/projects/type-annotations/) afin de leur adjoindre certaines caractéristiques. L'auteur de la [JSR en cause](http://jcp.org/en/jsr/detail?id=308) propose des exemples très parlants dont la seule vue devrait inspirer les développeurs Java tant ils produisent du code simple et clair : public int size() @Readonly { ... } Map<@nonnull String, @NonEmpty List> files; Au sujet des tableaux : Document[@Readonly] docs1; Document[][@Readonly] docs2 = new Document[2][@Readonly 12]; Cast de type : myString = (@NonNull String)myObject; Tests de types : boolean isNonNull = myString instanceof @NonNull String; Création d'objet : new @NonEmpty @Readonly List(myNonEmptyStringSet) Clauses throws void monitorTemperature() throws @Critical TemperatureException { ... } Dernière amélioration majeure qui va sûrement retenir l'attention des utilisateurs de Java : la modularisation de la JVM. Le [projet Jigsaw](http://openjdk.java.net/projects/jigsaw/) attendait depuis longtemps dans les cartons de SUN mais n'avait pas réussi à voir le jour tant ses implications sont importantes. La JVM de SUN est devenue très volumineuse et cela se ressent lors de son téléchargement et de son lancement. Ce projet a pour but de modulariser la JVM pour permettre de ne faire télécharger à l'utilisateur que ce dont il a besoin un peu à la manière d'un distribution Linux. En cas d'utilisation d'une nouvelle application, il suffirait alors de compléter la JVM par les modules qui n'ont pas encore été téléchargés la première fois et dont cette nouvelle application a besoin. L'apport en terme de souplesse de lancement est tout aussi prometteur. Voilà donc de bien belles promesses qui ne demandent plus qu'à être testées dans [les snapshots disponibles de Java 7](https://jdk7.dev.java.net/).

AltStyle によって変換されたページ (->オリジナル) /