Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scala Java Discussion :

Feuille de route pour Scala 2.13


Sujet :

Scala Java

  1. #1
    Responsable Qt & Livres

    Feuille de route pour Scala 2.13
    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).
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Chroniqueur Actualités

    La version 2.13 du langage Scala est disponible
    La version 2.13 du langage Scala est disponible
    avec une refonte des collections, des améliorations de la bibliothèque standard et un gain de performance pour le compilateur

    Scala, le langage de programmation multiparadigme vient de passer en version 2.13. Dans cette nouvelle itération, l’on y trouve des améliorations dans plusieurs domaines comme les collections, les bibliothèques, le langage ainsi que le compilateur.

    Au niveau des collections

    L’équipe de Scala a procédé à une refonte des collections de la bibliothèque standard afin d’apporter plus de simplicité, performance et sécurité au langage. Pour ce qui concerne les changements, nous avons entre autres les points suivants :

    Les signatures de méthodes rendues plus simples
    • Les méthodes de transformation ne prennent plus le paramètre implicite CanBuildFrom ;;
    • la bibliothèque résultante est plus facile à comprendre (en code, Scaladoc et complétion de code de l’EDI) ;;
    • avec la simplification du code, la compilation du code utilisateur est beaucoup plus rapide ;;
    • un nouvel objet implicite BuildFrom peut être utilisé dans quelques circonstances.

    La hiérarchie des types rendue également plus simples
    • Les traits Traversable et TraversableOnce ont été supprimés. Ils restent uniquement sous forme d’alias déconseillés pour Iterable et IterableOnce ;;
    • les collections parallèles sont maintenant un module séparé. En conséquence, GenSeq, GenTraversableOnce, et al ont été supprimés.

    Le passage par défaut de Scala.Seq comme élément immuable
    • Annoncé depuis un bout de temps, Seq est maintenant un alias pour collection.immutable.Seq ;;
    • cela change également le type de varargs dans les méthodes et les correspondances de modèles ;;
    • les tableaux passés en tant que méthode Java varargs sont copiés de manière défensive, ce qui sous-entend que la méthode varargs n’est pas affectée et les tableaux ne sont pas modifiés.

    De nouvelles collections concrètes ajoutées
    • La classe abstraite scellée Stream qui implémentait des listes paresseuses où les éléments ne sont évalués que lorsqu’ils sont nécessaires est maintenant obsolète.
    • immutable.LazyList remplace immutable.Stream;
    • immutable.ArraySeq qui est un wrapper immuable pour les tableaux est maintenant disponible en version mutable ;;
    • La classe CollisionProofHashMap empêche les attaques par déni de service ;
    • mutable.ArrayDeque a été également ajoutée à Scala 2.13. C’est une file d’attente à deux extrémités qui utilise en interne un tampon circulaire redimensionnable.

    En plus des modifications ci-dessus, plusieurs autres changements dans les collections ont été effectués dans cette nouvelle version.

    Au niveau de la concurrence

    Les futures ont été repensés en interne, avec les objectifs suivants :
    • fournir le comportement attendu dans un ensemble plus large de conditions de défaillance ;;
    • fournir une base pour une performance accrue ;;
    • supporter des applications plus robustes ;;

    Nous précisons que Future est un objet qui représente une valeur qui peut ou non être actuellement disponible, mais le sera à un moment donné ou une exception, si cette valeur n’a pas pu être rendue disponible.


    Au niveau de la bibliothèque standard

    De nouveaux éléments ont atterri dans la bibliothèque standard.

    Intégration de l’interopérabilité avec Java
    • L’ancien module scala-java8-compat fait maintenant partie de la bibliothèque standard ;;
    • ceci fournit des convertisseurs pour les options, les types de fonctions et les flux Java ;;
    • Comme mentionné ci-dessus, les convertisseurs de collection tels que JavaConverters ont été déplacés pour s’inscrire dans le nouveau schéma.

    Ajout de l’utilitaire scala.util.Using
    • Il utilise le modèle de prêt pour fournir une forme simple de gestion automatique des ressources.

    Ajout des méthodes .toIntOption et al
    • Ces nouvelles méthodes d’extension sur Strings sont fournies par StringOps ;;
    • Elles analysent les littéraux et rejettent efficacement les entrées non valides sans générer d’exceptions.

    Ajout de convertisseurs entre fonctions et extracteurs
    • Les nouvelles méthodes fournissent des conversions entre les objets facultatifs Functions, PartialFunctions et les extracteurs.

    Ajout de méthodes .withRight, .withLeft
    • Ces méthodes à gauche et à droite autorisent la conversion de l’autre paramètre de type.

    Autres modifications dans la Bibliothèque standard : dépréciations et suppressions

    Plusieurs dépréciations et suppressions ont été appliquées dans cette dernière version de Scala. Entre autres, nous avons les points ci-dessous :
    • La construction de chaînes utilisant + avec un type non-String à gauche (alias any2stringadd) est maintenant obsolète ;;
    • PartialFunction.fromFunction remplace PartialFunction.apply ;;
    • les projections à droite avec Either sont obsolètes ;;
    • la balise @usecase scaladoc est également obsolète ;;
    • Equiv est également devenu obsolète ;;
    • en outre, les modules suivants ne sont plus inclus dans la distribution : scala-xml, scala-parser-combinators, scala-swing;
    • les méthodes et les classes assorties et obsolètes de la bibliothèque standard ont été entièrement supprimées.

    Au niveau du langage

    Bien que cette dernière version de Scala soit axée sur les améliorations de la bibliothèque standard, des changements ont également été apportés à plusieurs niveaux du côté du langage.

    Les types littéraux
    • Les littéraux (pour les chaînes, les entiers, etc.) ont maintenant des types littéraux associés ;;
    • le compilateur fournira des instances d’une nouvelle classe scala.ValueOf[T] de types pour tous les types de singleton T ;;
    • la valeur d’un type singleton est accessible via une méthode appelante valueOf[T].

    Activation de l’unification partielle par défaut
    • Cette modification améliore l’inférence du constructeur de type ;;
    • le support de l’unification partielle de constructeurs de types n’est plus considéré comme expérimental ;;
    • le compilateur n’accepte plus -Ypartial-unification.

    Prise en charge de paramètres implicites par la méthode By-name avec des dictionnaires récursifs
    • cette fonctionnalité étend les arguments de méthode by-name pour prendre en charge les paramètres implicites ;;
    • cela permet à la recherche implicite de construire des valeurs récursives ;;
    • le cas d’utilisation phare est la dérivation de classe.

    Les soulignements dans les littéraux numériques
    • Les traits de soulignement peuvent maintenant être utilisés comme entretoises.

    Au niveau du compilateur
    • Le compilateur Scala est maintenant 5 à 10 % plus rapide que les versions précédentes ;;
    • En outre, il génère une sortie identique pour une entrée identique dans plus de cas, pour des versions reproductibles ;;
    • Enfin, les opérations sur les collections et les tableaux sont désormais davantage optimisées.

    Au-delà de ces améliorations, plusieurs autres optimisations ont été apportées dans cette nouvelle version de Scala.

    Source : Scala

    Et vous ?

    Que pensez-vous de cette nouvelle version de Scala ;? Répond-elle à vos attentes ;?

    Quels sont les ajouts, améliorations que vous aimez le plus ;ou le moins ;?

    Voir aussi

    Feuille de route pour Scala 2.13 : Collections, modularisation et améliorations de performance pour le compilateur
    Feuille de route de Scala 3.0 : il utilisera le compilateur Dotty afin de simplifier la structure du langage, Scala 3.0 est attendu en 2020
    Scala 3 prévu pour début 2020, peu après la sortie de la version 2.14 : Son créateur nous livre un aperçu de ses nouveautés
    Le langage Scala se met à la compilation rapide avec le compilateur incrémental Zinc
    Scala Native : un générateur de code natif pour accéder au bas niveau depuis le langage Scala
    Quel avenir pour le langage Scala depuis l’arrivée de Java 8, Venez partager votre expérience
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

###raw>template_hook.ano_emploi###