Calendrier 2016 pour Scala : la version 2.12 en vue
Scala est un langage de programmation pour la JVM, c’est-à-dire qu’il exploite l’écosystème Java, mais avec une syntaxe et des concepts radicalement différents de ceux de Java, tout en maintenant une forte compatibilité (tout code Java peut être appelé depuis Scala et vice-versa). Scala est donc un langage orienté objet, mais fonctionnel depuis sa conception (contrairement aux extensions fonctionnelles de Java 8) ; il possède également un système de typage fort. De manière générale, il tend à être concis tout en éliminant les défauts du langage Java — sa conception a débuté en 2001 à l’EPFL, dans le laboratoire de méthodes de programmation (LAMP).
La série actuelle, numérotée 2.11, sera la dernière à être compatible avec Java 6, avec des versions régulièrement mises à disposition. Les développeurs peaufinent énormément cette version, car la suivante est l’objet de grands travaux, avec notamment l’élimination de la compatibilité avec Java 6 et 7. La dernière version devrait être la 2.11.9, au troisième trimestre de 2016, c’est-à-dire deux ans après la première version de Scala 2.11.
Le futur s’annonce de plus en plus excitant : pour tirer le meilleur parti de Java 8, le compilateur encodera d’une manière très différente les traits et fonctions anonymes, beaucoup plus proche du comportement actuel de Java 8. Ainsi, l’interopérabilité sera beaucoup plus facile avec Java, avec la possibilité d’écrire des fonctions anonymes en Java pour les utiliser avec une bibliothèque Scala et vice-versa — ceci, sans changement du code Scala. Du côté technique, cet encodage utilisera les pointeurs sur méthodes (instances de la classe MethodHandle), comme Java 8, ce qui devrait diminuer les temps de compilation et la taille des binaires générés, même si le gain de performance n’est pas clair.
De manière plus générale, le compilateur a droit à une cure de jouvence, basé sur les derniers travaux côté EPFL de Miguel Garcia (partiellement intégrés dans Scala 2.11) : de manière générale, seule l’analyse syntaxique du code Scala est gardée par rapport aux versions précédentes, le reste a été fondamentalement retravaillé pour augmenter la performance (la compilation est de quinze pour cent plus rapide qu’avec Scala 2.10, sur tout le processus) et la taille des binaires générés.
La syntaxe du langage n’évolue pas entre Scala 2.11 et 2.12, toutes ces améliorations se font sous le capot. Actuellement, la préversion 2.12 M3 est disponible depuis début octobre ; elle est déclarée suffisamment stable pour que les développeurs de bibliothèques commencent à tester et à distribuer des versions compilées de leurs bibliothèques. La prochaine, numérotée 2.12 M4, est prévue fin janvier 2016, avec la première version admissible 2.12 RC1 fin mai 2016. La version finale n’est pas encore planifiée, mais ne devrait pas tarder, à moins que des défauts majeurs soient trouvés.
Les versions suivantes devraient reprendre le train des améliorations dans la syntaxe et la bibliothèque standard, avec un compilateur bien plus facile à maintenir et à faire évoluer. Rien n’est encore véritablement planifié, mais les améliorations imaginées comportent :
- une simplification des collections (par exemple, de leur hiérarchie), par défaut immuables, avec un déplacement de fonctionnalités en dehors de la bibliothèque standard, notamment pour faciliter l’optimisation ;
- des collections parallèles avec des améliorations de performance, obtenues par la fusion d’opérations et un ordonnancement ;
- l’intégration de la réflexion et des macros à la Lisp comme fonctionnalités pleinement supportées (certaines sont actuellement expérimentales) ;
- une syntaxe simplifiée et unifiée, pour se rapprocher des principes fondateurs du langage : un ensemble réduit de fonctionnalités orthogonales faciles à assembler (comme Lisp) ; la syntaxe XML pourrait ainsi disparaître, tout comme les fonctionnalités qui mènent régulièrement à des comportements inexplicables pour les débutants.
Source : 2016 Scala Release Schedule update, Scala 2.12 Roadmap.
Ce contenu a été publié dans Scala par dourouc05.
Scala 2.12 disponible et permet de tirer le meilleur parti de Java 8
Scala 2.12 disponible et permet de tirer le meilleur parti de Java 8
un compilateur retravaillé pour utiliser les nouvelles fonctionnalités VM de Java 8
Scala est un langage de programmation orienté objet et fonctionnel pour la machine virtuelle Java (JVM), c’est-à-dire qu’il exploite l’écosystème Java, mais avec une syntaxe et des concepts radicalement différents de ceux de Java, tout en maintenant une forte compatibilité, de sorte que tout code Java puisse être appelé depuis Scala et vice-versa.
Scala 2.12.0 est désormais disponible avec un compilateur complètement retravaillé afin de pouvoir utiliser les nouvelles fonctionnalités VM disponibles dans Java 8 (il permet donc de générer du code nécessitant un runtime Java 8). On note ici qu’un trait se compile directement en une interface avec les méthodes par défaut, ce qui permet d’améliorer la compatibilité binaire et l'interopérabilité avec Java.
L'interopérabilité entre Scala et Java 8 s’améliore encore pour le code fonctionnel alors que « les méthodes qui prennent des fonctions peuvent facilement être appelées dans les deux sens en utilisant la syntaxe lambda », est-il indiqué sur le site scala-lang.org. Il faut encore noter que « les classes FunctionN de la bibliothèque standard de Scala sont désormais des méthodes de type SAM (Single Abstract Method), et tous les types SAM sont traités uniformément - de la vérification de type jusqu'à la génération de code ».
Cette nouvelle version du langage orienté objet et fonctionnel pour la JVM embarque également un nouvel optimiseur. « L'optimiseur est configuré en utilisant l'option -opt de compilateur. Par défaut, il supprime uniquement le code inaccessible au sein d'une méthode ». L'élimination de code mort et un certain nombre d'optimisations de nettoyage sont également incluses dans Scala 2.12.
GenBCode, le nouveau back-end dans Scala 2.12 émet du code plus rapidement, car il génère directement un bytecode à partir des arbres du compilateur Scala, tandis que le back-end précédant utilise une représentation intermédiaire appelée "ICode". Les anciens back-ends (GenASM et GenIcode) ont été supprimés.
Les nouveaux encodages pour les traits et les lambdas dans Scala 2.12 conduisent à des fichiers JAR beaucoup plus petits. Par exemple, pour la version 3.0.0 de scalatest (le framework pour tester du code Scala), la taille du JAR est passée de 9,9 Mo dans Scala 2.11.8 à 6,7 Mo. Il faut également noter que les versions 2.12.x seront entièrement compatibles au niveau binaire. Toutefois, la compatibilité binaire n’est pas assurée entre Scala 2.11 et 2.12.
Il est également important de noter que cette nouvelle version de Scala élimine la compatibilité avec Java 6 et 7.
Scala 2.12.0 présente un certain nombre de problèmes connus qui seront corrigés dans la version 2.12.1 prévue à la fin du mois de novembre. Scala 2.11.9, la dernière version de la branche 2.11.x devrait quant à elle sortir à la mi-décembre.
Source : Scala-lang.org
Et vous ?
:fleche: Utilisez-vous Scala ? Qu’en pensez-vous ?
:fleche: Quelles sont les nouveautés les plus intéressantes de cette version selon vous ?
:fleche: Qu’est-ce qui manque dans Scala 2.12.0 et que vous aimeriez voir dans les prochaines versions de Scala ?
Voir aussi :
:fleche: Scala Native : un générateur de code natif pour accéder au bas niveau depuis le langage Scala
:fleche: Quel avenir pour le langage Scala depuis l'arrivée de Java 8 ? Venez partager votre expérience