Dans la communauté Scala, 2017 sera l’année du développement de la version 2.13 du langage (la première RC devrait arriver début 2018). La version 2.12 est donc encore là pour un certain temps. La feuille de route est déjà établie pour Scala 2.13, avec les fonctionnalités souhaitées — modulo les autres envies de la communauté qui seront intégrées d’ici là. Quatre axes ont été définis : une réécriture de la bibliothèque de collections, des améliorations de performance pour le compilateur, la modularisation de la bibliothèque standard, des simplifications pour les utilisateurs du langage.
Collections
La bibliothèque des collections de Scala est assez régulièrement retravaillée pour la rendre plus facile à utiliser, en améliorer la performance ou la qualité du code. L’itération actuelle date de Scala 2.8 et utilise un grand nombre de couches d’abstraction, très flexibles, qui généralisent tant les collections immuables qu’altérables, parallèles que séquentielles. Chaque nouvelle collection peut ainsi réutiliser une grande partie du code déjà écrit.
Cette implémentation a cependant un certain nombre de défauts. Principalement, pour créer de nouvelles collections, il faut se plonger en profondeur dans la documentation pour déterminer les paramètres implicites à utiliser et vérifier les fonctions héritées à réécrire. Les utilisateurs ne sont pas en reste : niveau performance, tout n’est pas parfait. Par exemple, Slick a pu grandement accélérer certaines étapes de calcul (de l’ordre de 25 % !) en réimplémentant certaines collections, sans chercher à adapter leur implémentation à leurs besoins.
Les modifications prévues visent principalement à réduire fortement l’utilisation de l’héritage pour les collections, tout en gardant un très haut niveau de compatibilité des sources avec l’implémentation existante (soit garder l’API existante, soit proposer un outil pour corriger automatiquement le code source). Les développements sont visibles sur GitHub.
Modularisation
La modularisation de la bibliothèque standard de Scala a commencé avec la version 2.11. L’objectif est de déporter une partie du code en dehors du cœur de l’implémentation du langage et de laisser la communauté proposer des solutions. L’avantage principal est que les solutions proposées peuvent évoluer nettement plus vite que Scala.
Un autre avantage est que le cœur peut garder une compatibilité binaire nettement plus facilement entre versions de Scala, ce qui limite les problèmes lors des mises à jour. Il faut noter que Scala laisse toujours accès à la bibliothèque standard Java, ce qui est loin d’être négligeable.
Avec Scala 2.13, la bibliothèque standard se réduira aux collections et à quelques types de base (Option, TypleN, Either, Try).
Améliorations du compilateur
Le langage en lui-même n’évoluera pas tellement avec la version 2.13, celle-ci se focalisant sur les aspects des bibliothèques. Cependant, le travail continue sur le compilateur, principalement pour le rendre plus rapide. Le premier objectif poursuivi sera de développer l’infrastructure nécessaire pour mesurer finement la performance du compilateur. Ensuite, les développeurs de Scala utiliseront tous les outils à leur disposition pour détecter les problèmes (principalement, des profileurs JVM).
Partager