Du 11 au 13 Juin 2019, s’est tenue la dixième édition des Scala Days à Lausanne, berceau de ce langage de programmation où Martin Odersky, a créé Scala alors qu’il était professeur à l’Ecole Polytechnique de Lausanne.
Ces Scala Days ont été l’occasion de présenter les nouveautés des versions 2.13 et 3 (alias Dotty).
Les nouveautés majeures de Scala 2.13
Scala 2.13 est né de 1.500 pull requests effectués par la communauté et en particulier de 162 contributeurs. N’hésitez donc pas à participer !
Les collections
Avant tout, la version 2.13 apporte une révision complète de la librairie standard et c’est un point central de cette release.
Les collections existent dans le langage depuis la version 2.8 du code, mais cette fois-ci, on les a complètement remaniées.
Rappelons que les Collections proposent un vocabulaire prêtes à l’emploi, concis et qui limite les erreurs. Les librairies ainsi mises à dispositions par Scala sont également performantes car optimisées et universelles. Alors, pourquoi les modifier ? Pour les rendre encore plus simples d’utilisation et plus performantes ! C’est notamment l’idée de retirer le « CanBuildFrom ».
On a également simplifié la hiérarchie des Scala Collections (Traversable déprécié) et séparé les Collections parallèles.
L’Implémentation de HashMap/Set a été remplacée ce qui surpasse considérablement les anciennes implémentations
(im.LazyList, ArraySeq, im.Stack, im.SeqMap, im.TreeSeqMap)
On a ajouté de nouvelles méthodes, parmi lesquelles : .unfold, .lengthIs, .sizeIs, .sizeCompare, .lazyZip, .updatedWith .maxOption, .minOption, .maxByOption, .minByOption
Les Futures and Promises
Les Futures dans Scala permettent de raisonner sur l’exécution de nombreuses opérations en parallèle, de manière efficace et non bloquante. Un placeholder réservé à une valeur qui n’existe peut-être pas encore est un Future. La composition de tâches simultanées de cette manière a tendance à produire un code parallèle plus rapide, asynchrone et non bloquant.
La révision du fonctionnement des Futures and Promises avec une optimisation majeure de l’ExecutionContext.global est opérationnelle. Ainsi, il en ressort un comportement beaucoup plus stable et cohérent même en cas de défaillance et des améliorations significatives des performances. L’équipe Scala annonce des traitements 2 à 5 fois plus rapides (Pour plus de détails, cf. Talk de Viktor Klang).
Le langage Scala lui-même
Le langage lui-même,a subi quelques améliorations :
- Interpolation dans un pattern-matching
- Nouveaux opérateurs de compositions
- Unification de Function et PartialFunction
- Syntaxe procédurale dépréciée
Enfin, l’amélioration du compilateur Scala est effective et serait 5 à 10% plus rapide. Comme les outils de building, suite à leurs mises à jour ! Les Scala Interactive Building Tool sbt 1.2.8+ ou 0.13.18+ sont à télécharger ici !
Les annonces de Scala 3 (Dotty)
Nous avons assisté à la présentation des nouveautés de Scala 3 dont la release officielle ne sera dévoilée qu’en Octobre 2020 (elle a pris un peu de retard…).
Elle se veut à la fois une transition simple pour ceux qui connaissent déjà le langage et une nouvelle étape majeure dans la fusion entre la programmation orientée objet et la programmation fonctionnelle, qui est l’essence même du langage. Scala 3 aura pour objectif de consolider les librairies existantes et d’éliminer les incohérences afin d’améliorer sa sécurité, son utilisabilité et sa performance. Le support LSP (Language Server Protocol) agrémentera le compilateur Dotty .
La transition entre Scala 2 et Scala 3 se voudra facilitée par l’utilisation d’une option -language : Scala2 qui permettra de compiler la plupart de ses codes et mettra en évidence les portions de code qui devront être réécrites.
Grâce à l’exécution de l’option -rewrite, on devrait même pouvoir traiter automatiquement certaines migrations de code.
Laisser un commentaire