Scala 3, la dernière version du langage fonctionnel orienté objet pour les moteurs d'exécution JVM et JavaScript, est donc disponible en version de production. La mise à jour, que le projet qualifie de « refonte complète », comprend un nouveau système de types et des améliorations syntaxiques. Livrée le 14 mai dernier, la version de production de Scala 3 succède à la release candidate disponible depuis le 17 février. Parmi les améliorations apportées par cette version figurent une nouvelle syntaxe « silencieuse » pour les structures de contrôle comme if, while et for.

Scala dispose de moteurs d'exécution JVM et JavaScript et il est destiné à la construction de systèmes haute performance avec accès à des écosystèmes de bibliothèques.

Parmi les autres améliorations syntaxiques de Scala 3, on peut citer :

- Des accolades facultatives supportant un style de programmation sans distraction et sensible à l'indentation.

- Le mot-clé new est désormais optionnel.

- Les caractères génériques au niveau du type ont été remplacés par « ? » au lieu de « _ ».

- Les implicites et leur syntaxe ont été fortement révisés.

Des fonctionnalités complémentaires

Nouvelles fonctionnalités de langage dans Scala 3 :

- Par rapport aux implicites de Scala 2, les clauses d’usage peuvent être spécifiées par type, ce qui libère les signatures de fonctions des noms de variables qui ne sont jamais explicitement référencés.

- Les instances données permettent aux programmeurs de déterminer la valeur canonique d'un certain type, ce qui rend la programmation avec les classes de type plus simple, sans divulguer les détails de l'implémentation.

- Les modalités d'extension sont désormais directement intégrées au langage, ce qui permet d'améliorer les messages d'erreur et l'inférence de type.

- Les conversions implicites ont été remaniées en instances d'une classe de type Conversion.

- Une fonctionnalité contextuelle fait des abstractions contextuelles un élément de première classe. Celles-ci servent d'outil aux auteurs de bibliothèques pour exprimer des langages concis spécifiques à un domaine.

- Si un paramètre implicite ne peut pas être résolu par le compilateur, des suggestions d'importation sont fournies pour résoudre le problème.

Des améliorations du système de types

Au sein de Scala 3, il faut compter aussi sur des améliorations du système de types :

- Les enums, ou énumérations, ont été repensés pour mieux se fondre dans les classes de cas et seront le nouveau standard pour exprimer les types de données algébriques.

- Les alias de types opaques permettent aux développeurs de cacher les détails de mise en œuvre sans nuire aux performances.

- Les types d'intersection et d'union permettent d'exprimer les contraintes de type en dehors de la hiérarchie d'héritage.

- Les types de fonctions polymorphes peuvent s'abstraire des fonctions qui prennent des arguments de type en plus de leurs arguments de valeur.

- Les lambdas de type sont des fonctions de niveau type qui peuvent être passées comme arguments de type sans avoir besoin d'une définition de type auxiliaire.

- Au lieu de coder le calcul au niveau du type en utilisant la résolution implicite, Scala 3 prend en charge la correspondance sur les types.

Caractéristiques de la programmation orientée objet de Scala 3 :

- Les traits de Scala - sorte d’interface partiellement implementée - se rapprochent des classes et peuvent maintenant prendre des paramètres, ce qui les rend plus puissants en tant qu'outil de décomposition modulaire des logiciels.

- Les classes ouvertes exigent que les concepteurs de bibliothèques marquent les classes comme étant ouvertes.

- Les traits utilitaires qui implémentent un comportement ne devraient parfois pas faire partie des types inférés. Avec Scala 3, ces traits peuvent être marqués comme transparents, cachant l'héritage à l'utilisateur.

- Le null explicite déplace le null hors de la hiérarchie des types, pour déceler les erreurs de manière statique. Des contrôles supplémentaires pour une initialisation sûre permettent d'accéder aux objets non initialisés.

Scala 3 offre également des outils de métaprogrammation, notamment des opérations au moment de la compilation, des blocs de code sous forme de citation et une fonction en ligne qui permet de réduire les valeurs et les méthodes au moment de la compilation.

Les instructions pour le téléchargement de Scala 3 sont disponibles ici