BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités Questions / Réponses sur le lancement de Java 8

Questions / Réponses sur le lancement de Java 8

Java 8 est l'une des plus attendues mises à jour d'un langage de programmation depuis de nombreuses années. Cette version contient une API de date, une API de flux et les lambdas. En ajoutant le retrait du permgen, on obtient une jolie collection d'améliorations. Pour en savoir plus sur cette version, nous avons rencontré Georges Saab, Vice-Président du développement logiciel, dans le Java Platform Group, chez Oracle.

InfoQ : Pour ceux d'entre nous qui n'ont pas suivi de près le projet lambda, pouvez-vous nous donner une idée de ce qu'impliquait cette implémentation ? Je pense que c'est la première fois que le langage, la VM et les librairies évoluent ensemble de façon si coordonnée.

Beaucoup des améliorations des précédentes versions ont été faites de sorte qu'un seul des ces trois aspects soit affecté, ou alors les modifications apportées à chaque aspect étaient présentées au cours d'un certain nombre de versions majeures.

Avec Lambda dans Java 8, nous avons effectué des changements coordonnés à travers le langage, les librairies et la JVM, pendant le développement desquels chaque aspect a influencé et renforcé la conception et l'implémentation des autres.

Par exemple, nous avons essayé différentes implémentations alternatives des Lambdas sur la VM, et découvert que nous pouvions utiliser InvokeDynamic. En l'utilisant, nous avons trouvé des choses à améliorer dans InvokeDynamic. Le désir d'utiliser les Lambdas de façon naturelle avec les collections a mené à la conception de l'API Streams, et à d'autres méthodes par extension, ce qui nécessite un support dans le langage.

Cela a été un processus d'évolution sur plusieurs années ponctué de beaucoup de très bons retours de la part de la communauté.

InfoQ : Pensez-vous que l'ajout des Lambdas va ramener les développeurs Groovy et Scala à Java ?

Il est intéressant de noter que les deux langages que vous mentionnez (ainsi qu'une foule d'autres) tournent sur la JVM. En fait, nous avons beaucoup travaillé pour supporter d'autres langages que Java sur la JVM, et pensons qu'il y a beaucoup à apprendre pour les programmeurs de langage sur ce qui marche et ne marche pas. Bien sûr, il est plus simple d'expérimenter sur un langage avec quelques milliers d'utilisateurs que sur un langage avec plusieurs millions d'entre eux. Ce sur quoi nous sommes vraiment concentrés est la mise en place de choses qui vont améliorer la vie de millions de développeurs Java - l'évolution de manière réfléchie et responsable.

InfoQ : La combinaison des Lambdas et de l'API Streams nous aide à développer du code clair et concis, mais des questions ont été émises sur les potentiels coûts en performance, comme de plus en plus de filtres sont appliqués pour affiner un ensemble de manière fonctionnelle. Est-ce une inquiétude valable ? Quelles optimisations ont été mises en place pour mitiger ces coûts ?

Streams supporte les opérations intermédiaires et terminales. Les opérations intermédiaires, comme les filtres, ne font en fait aucun filtrage elles-mêmes, elles créent à la place un nouveau Stream qui, lorsqu'il est traversé, fournit les éléments du Stream filtré qui répondent à un prédicat donné. Donc d'un côté, créer des filtres additionnels pourrait résulter en plus de travail effectué à l'exécution.

D'autre part, traiter paresseusement les flux, comme le font toutes les opérations intermédiaires sur ceux-ci, permet des économies considérables, comme plusieurs opérations peuvent être fusionnées en un seul passage sur les données. Associé à de puissantes optimisations sous le capot de la JVM, prudemment permises par la conception des lambdas, l'impact potentiel des filtres additionnels pourrait être réduit de façon significative.

Un autre élément à considérer est que l'utilisation de la parallélisation est beaucoup plus simple avec les Streams et les lambdas. En outre, les opérations sur les flux parallèles peuvent bénéficier des contraintes d'ordonnancement de relaxation quand les utilisateurs ne sont pas particulièrement intéressés par l'ordre dans le flux sous-jacent.

InfoQ : Une autre fonctionnalité significative est la présence des Annotations sur les Java Types, qui permet de développer des vérificateurs de types connectables. Pouvez-vous nous en dire un peu plus à ce sujet - par exemple, qu'espérez-vous que les développeurs en fassent ?

Cette fonctionnalité permet de mettre des annotations sur les noms des types à peu près partout où ils peuvent être utilisés. Du fait de ce changement, les développeurs peuvent à présent écrire des annotations pour détecter des conditions d'erreur à la compilation en utilisant des vérificateurs de types connectables. De tels systèmes de vérification et d'annotations sont développés dans la communauté pour les erreurs de pointeur nul et les questions de verrouillage et d'internationalisation.

Le Checker Framework, de checker-framework.org, de Prof. Michael Ernst, est une bonne source d'informations et d'implémentations, qui comprend un vérificateur de nullité, parmi plus d'une douzaine d'outils de ce type. Michael a aussi été co-Directeur des spécifications de la JSR 308, où cette fonctionalité du langage est décrite.

Il serait intéressant de voir les résultats d'au moins un de ces systèmes d'annotation appliqué sur la base de code du JDK à l'avenir et, bien sûr, de voir la communauté plus large de développeurs Java commencer à utiliser cette technologie sur sa propre base de code et développer de nouveaux vérificateurs pour d'autres questions de qualité logicielle.

En particulier, en ce qui concerne les sytèmes embarqués et de sécurité critique, ce type d'innovation pourrait permettre à des propriétés et des contraintes cruciales sur les types et leur utilisation d'être qualifiées et analysées en tant qu'élément du processus de compilation, fournissant aux utilisateurs d'autres langages dédiés, un moyen de migrer sur la plateforme Java à l'avenir.

InfoQ : Quelles sont selon vous les plus importantes améliorations pour les langages dynamiques dans Java 8 ?

Ce doit être l'amélioration des performances dans le HotSpot VM en général, plus particulièrement autour du InvokeDynamic. Une fonctionnalité significative de Java 8 est le Nashorn JavaScript Engine, une implémentation légère et haute performance du langage dynamique populaire. Améliorer les performances de Nashorn nous a aidé à trouver de nouvelles opportunités d'optimisation de la JVM pour les implémentations de langages dynamiques.

En plus, Nashorn fournit à présent une manière très agréable d'utiliser Java pour JavaScript en donnant un accès simple aux classes Java, permettant à des applications JavaFX entières d'être écrites en JavaScript et de tourner sur la JVM. Ce type d'interopérabilité entre langages dynamiques tournant sur la JVM et Java offre une manière efficace d'écrire de telles applications.

InfoQ : Les inquiétudes à propos de Java et de la sécurité ont rarement été hors de propos ces dernières années. Java 8 contient-il des améliorations spécifiques soit au niveau du plugin Java du navigateur, soit ailleurs ?

Beaucoup d'améliorations importantes et de nouvelles fonctionnalités en matière de sécurité ont été livrées en tant que partie des mises à jours d'Oracle Java SE 7, notamment les Deployment Rule Sets et les Exception Site Lists. Maintenir la côte de sécurité de Java est une priorité pour nous.

De plus, Java SE 8 contient de nombreuses fonctionnalités de sécurité. Les plus visibles au premier abord doivent être les améliorations de l'implémentation du Transport Layer Security : TLS 1.2 est maintenant par défaut sur la plateforme. Parmi les APIs de sécurité, il y a de nombreuses autres améliorations, de l'amélioration de la vérification de révocation de certificat aux nouveaux algorithmes de cryptographie.

InfoQ : Connaissez-vous le pourcentage de développeurs utilisant Java 5, 6 et 7 ? Y a-t-il des plans pour accélérer l'adoption de Java 8 ?

Au cours des 6-9 derniers mois, je suis intervenu dans des conférences autour du monde, et j'ai demandé à chaque fois aux gens quelle version ils utilisaient. D'après cette étude informelle et non-scientifique, la plupart des développeurs Java utilisent aujourd'hui Java SE 7, avec une claire minorité (mais non négligeable) toujours sur la 6, et un petit nombre sur des versions plus anciennes. Du point de vue du développeur, Java SE 8 arrive avec des raisons très attirantes d'être adopté rapidement, sous la forme des nouvelles fonctionnalités et APIs du langage. Avec des IDEs comme NetBeans, Eclipse et IntelliJ IDEA travaillant dur pour fournir de bons outils pour ces fonctionnalités dans leurs versions futures, je m'attends à voir les développeurs l'adopter rapidement.

InfoQ : Un des thèmes principaux de JavaOne l'année dernière était l'unification de la plateforme pour Java ME, SE et EE. A quel point Java 8 a-t-il avancé dans cette direction ?

L'une des nombreuses nouveautés de Java SE 8 est le support de Compact Profiles. Ils définissent un sous-ensemble de Profiles de la Java SE Platform Specification, acceptent des applications qui ne nécessitent pas de déployer la plateforme entière et fonctionnent sur de petits appareils. Couplés à d'autres améliorations du HotSpot, comme la réduction de l'empreinte mémoire des metadatas, et l'empreinte de la VM en général, cette fonctionnalité permet au JDK 8 d'être étendu au développement et au déploiement d'applications sur de petits appareils. Pour rendre cela plus simple, un nouvel outil appelé jdeps est inclus dans le JDK 8, et laisse les développeurs choisir le Profile dont leur code dépend.

D'autre part, Java ME 8 a été amélioré pour inclure un langage, une VM et des librairies mieux alignés avec Java SE 8. Même si vous ne pourrez pas encore utiliser les lambdas dans votre code Java ME 8, la plateforme supporte à présent les constructions sémantiques Java introduites dans Java SE 1.5, 6 & 7, tels que les assertions, les génériques, les énumérations, les String dans les Switch, les expressions try-with-resources et les opérateurs diamants. De la même façon, les librairies du coeur ont été mises à jour avec le support des protocoles web modernes, comme l'IPv6, et des fonctionnalités de sécurité avancées, incluant le support du TLS 1.2, rendant les plateformes Java SE et ME plus proches que par le passé.

InfoQ : Quand verrons-nous des implémentations de Stripped ajoutées à Java ?

Une fois que Java 8 sera lancé, nous devrons nous pencher sur la façon dont cette fonctionnalité peut être ajoutée à la Plateforme d'une version antérieure à Java SE 9. Ce n'est pas un problème technique, mais une question d'assurer que le texte de spécification et que le framework légal associé permettent des cas d'utilisation tout en évitant la fragmentation de la plateforme Java.

Un grand merci à Georges pour avoir répondu à nos questions.

Evaluer cet article

Pertinence
Style

Contenu Éducatif

BT