La version 3 de Scala, un langage orient� objet et fonctionnel, est disponible,
elle apporte une nouvelle conception des abstractions contextuelles et am�liore le syst�me de types
Anatolii Kmetiuk, programmeur Scala, a annonc� le 14 mai Scala 3, un langage de programmation polyvalent � typage statique qui prend en charge la programmation orient�e objet et la programmation fonctionnelle. Cette version int�gre les derni�res recherches en th�orie des types ainsi que l'exp�rience industrielle de Scala 2. � Apr�s 8 ans de travail, 28 000 commits, 4 100 probl�mes r�solus, Scala 3 est enfin disponible �, a d�clar� Anatolii Kmetiuk. � Nous avons vu ce qui a bien (ou moins bien) fonctionn� pour la communaut� dans Scala 2. Sur la base de cette exp�rience, nous avons cr�� la troisi�me it�ration de Scala, facile � utiliser, � apprendre et � adapter �, a-t-il ajout�.
Rappelons que Scala est un langage de programmation polyvalent � typage statique qui prend en charge la programmation orient�e objet et la programmation fonctionnelle. Con�u pour �tre concis, Scala avec ses nombreuses d�cisions de conception vise � r�pondre aux critiques de Java. La version 3 du langage est une refonte compl�te du langage Scala. � la base, de nombreux aspects du syst�me de types ont �t� modifi�s pour �tre davantage fond�s sur des principes. Une chose qui a compl�tement chang� dans Scala 3 par rapport � Scala 2 : ce sont les macros. Le langage comporte �galement un grand nombre de nouvelles fonctionnalit�s. Voici, ci-dessous, quelques-unes de ces nouvelles fonctionnalit�s.
Abstractions contextuelles
L'un des concepts fondamentaux sous-jacents de Scala �tait (et est toujours dans une certaine mesure) de fournir aux utilisateurs un petit ensemble de fonctionnalit�s qui peuvent �tre combin�es � une grande expressivit� (et parfois m�me impr�vue). Par exemple, la fonctionnalit� des implicites a �t� utilis�e pour mod�liser l'abstraction contextuelle, pour exprimer le calcul au niveau du type, pour mod�liser les classes de type, pour effectuer des coercitions implicites, pour encoder des m�thodes d'extension, et bien plus encore. Tirant les le�ons de ces cas d'utilisation, Scala 3 adopte une approche l�g�rement diff�rente et se concentre sur l'intention plut�t que sur le m�canisme. Au lieu d'offrir une seule fonctionnalit� tr�s puissante, Scala 3 propose plusieurs fonctionnalit�s de langage sur mesure, permettant aux programmeurs d'exprimer directement leur intention :
- abstraction des informations contextuelles : les clauses d'utilisation permettent aux programmeurs de s'abstraire des informations qui sont disponibles dans le contexte d'appel et qui devraient �tre transmises implicitement. En tant qu'am�lioration par rapport aux implicites de Scala 2, les clauses d'utilisation 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 ;
- fournir des instances de classe de type : les instances donn�es permettent aux programmeurs de d�finir la valeur canonique d'un certain type. Cela rend la programmation avec les classes de type plus simple sans divulguer les d�tails d'impl�mentation ;
- extension r�troactive des classes : dans Scala 2, les m�thodes d'extension devaient �tre cod�es � l'aide de conversions implicites ou de classes implicites. En revanche, dans Scala 3, les m�thodes 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 ;
- consid�rer un type comme un autre : les conversions implicites ont �t� repens�es d�s le d�part comme des instances d'une classe de type Conversion ;
- abstractions contextuelles d'ordre sup�rieur : la toute nouvelle fonctionnalit� des fonctions contextuelles fait des abstractions contextuelles un citoyen de premi�re classe. Elles constituent un outil important pour les auteurs de biblioth�ques et permettent d'exprimer des langages concis sp�cifiques � un domaine ;
- retour d'information du compilateur : dans le cas o� un param�tre implicite ne peut pas �tre r�solu par le compilateur, il fournit maintenant des suggestions d'importation qui peuvent r�soudre le probl�me.
Am�liorations du syst�me de types
Outre l'am�lioration consid�rable de l'inf�rence de type, le syst�me de types de Scala 3 offre �galement de nombreuses nouvelles fonctionnalit�s, elle apporte des outils pour exprimer de mani�re statique des invariants dans les types :
- �num�rations : les �num�rations ont �t� redessin�es pour se fondre dans les classes de cas et former le nouveau standard pour exprimer les types de donn�es alg�briques ;
- types opaques : cachez les d�tails de mise en �uvre derri�re des alias de types sans en payer le prix en termes de performances. C'est tout l�int�r�t des types opaques qui remplacent les classes de valeurs et permettent de mettre en place une barri�re d'abstraction sans causer de surcharge suppl�mentaire ;
- types d'intersection et d'union : le fait de baser le syst�me de types sur de nouvelles bases a conduit � l'introduction de nouvelles caract�ristiques du syst�me de types : les instances des types d'intersection, comme A & B, sont des instances de A et de B. Les instances des types d'union, comme A | B, sont des instances de A ou de B. Ces deux constructions permettent aux programmeurs d'exprimer de mani�re flexible les contraintes de type en dehors de la hi�rarchie d'h�ritage ;
- types de fonctions d�pendantes : Scala 2 permettait d�j� aux types de retour de d�pendre des arguments (valeurs). Dans Scala 3, il est maintenant possible de faire abstraction de ce mod�le et d'exprimer des types de fonctions d�pendantes. Dans le type F = (e : Entry) => e.Key le type de r�sultat d�pend de l'argument ;
- types de fonctions polymorphes : comme pour les types de fonctions d�pendantes, Scala 2 supportait les m�thodes qui autorisent les param�tres de type, mais ne permettait pas aux programmeurs de s'abstraire de ces m�thodes. Avec Scala 3, les types de fonctions polymorphes comme [A] => Liste[A] => Liste[A] peuvent s'abstraire des fonctions qui prennent des arguments de type en plus de leurs arguments de valeur ;
- les lambdas de type : ce qui devait �tre exprim� � l'aide d'un plugin de compilation dans Scala 2 est maintenant une fonctionnalit� de premi�re classe dans Scala 3 : les lambdas de type sont des fonctions de niveau de type qui peuvent �tre pass�es comme arguments de type sans n�cessiter une d�finition de type auxiliaire ;
- correspondance des types : au lieu d�impl�menter le calcul au niveau du type en utilisant la r�solution implicite, Scala 3 offre un support direct pour la mise en correspondance des types. L'int�gration du calcul au niveau du type dans le v�rificateur de type permet d'am�liorer les messages d'erreur et de supprimer le besoin d'encodages complexe.
Programmation orient�e objet
Scala a toujours �t� la fronti�re entre la programmation fonctionnelle et la programmation orient�e objet. Les modifications du syst�me de types mentionn�es ci-dessus et la nouvelle conception des abstractions contextuelles rendent la programmation fonctionnelle plus facile qu'auparavant. En m�me temps, les nouvelles fonctionnalit�s suivantes permettent des conceptions orient�es objet bien structur�es et soutiennent les meilleures pratiques.[B]
- pr�voir l'extension : l'extension des classes qui ne sont pas pr�vues pour l'extension est un probl�me de longue date dans la conception orient�e objet. Pour r�soudre ce probl�me, les classes ouvertes exigent que les concepteurs de biblioth�ques marquent explicitement les classes comme �tant ouvertes ;
- cacher les d�tails d'impl�mentation : les traits utilitaires qui impl�mentent un comportement ne devraient parfois pas faire partie des types inf�r�s. Dans Scala 3, ces traits peuvent �tre marqu�s comme transparents, cachant l'h�ritage � l'utilisateur (dans les types inf�r�s) ;
- la composition au lieu de l'h�ritage : cette phrase est souvent cit�e, mais fastidieuse � mettre en �uvre. Avec Scala 3, sym�triquement aux importations, les clauses d'exportation permettent � l'utilisateur de d�finir des alias pour des membres d'un objet s�lectionn�s.
Et vous ?
Avez-vous une exp�rience avec Scala ?
Que pensez-vous de Scala ?
Quelle am�lioration vous int�resse le plus dans la version 3 de Scala ?
Pensez-vous que le langage Scala pourrait r�pondre aux critiques sur le Java ?
Voir aussi :
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
EduTools 2021.2.1 est disponible. Le plugin de JetBrains pour apprendre et enseigner des langages de programmation, apporte de nombreuses nouvelles fonctionnalit�s et am�liorations
JetBrains lance un tout nouveau guide pour IntelliJ IDEA pour offrir aux d�veloppeurs une r�f�rence, quel que soit leur niveau d'exp�rience avec son EDI
Gradle 7.0 est disponible, il apporte une surveillance du syst�me de fichiers par d�faut sur toutes les plateformes prises en charge, Y compris les versions r�centes de Windows, Linux et MacOS
Partager