IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

Le , par Bruno

110PARTAGES

9  0 
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

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Pyramidev
Expert confirmé https://www.developpez.com
Le 17/05/2021 à 22:17
Citation Envoyé par Bruno Voir le message
Avez-vous une expérience avec Scala ?
Pas encore, mais bientôt. Mon prochain poste sera en Scala.

Citation Envoyé par redcurve Voir le message
Ce machin existe encore
Oui. Et, pour la carrière, je pense que ça reste un bon plan. Il est toujours bien classé quand il s'agit de salaire :
4  1 
Avatar de loic38_01
Membre du Club https://www.developpez.com
Le 18/05/2021 à 13:25
Citation Envoyé par grunt2000 Voir le message
Comment on en fait un backend de serveur web ? Pardon, désolé, je retire la question, parce qu'on le fait utiliser des classes Java alors.

C'est un langage de niche, avec une utilisation de niche.
Il existe de nombreux frameworks Web pour Scala (et écrits en Scala), le plus connu était Play Framework (utilisé chez de nombreuses entreprises dont Linkedin, Apple). Le backend Twitter est également basé sur Scala à travers le framework Finagle. Il y a aussi Akka HTTP , Http4s...
Je développe en Scala depuis pas mal d'années et je ne pense pas qu'il faille prendre l'experience qu'on l'on peut avoir avec Spark comme référence, c'est assez éloigné de tout ce que font les gens en Scala en dehors du Big Data (qui doit représenter 1/3 de l'utilisation du langage, c'est beaucoup mais pas le plus important).

L'écosystème autour de ZIO est par exemple beaucou plus intéressant et dynamique : https://zio.dev/
Un coup d'oeil sur les offres d'emploi peut être intéressant aussi : https://scalajobs.dev/
2  0 
Avatar de loic38_01
Membre du Club https://www.developpez.com
Le 18/05/2021 à 10:13
Un vrai plaisir d'utiliser Scala 2 depuis presque 10 ans maintenant (projets web backend principalement), j'ai hâte de passer sur la nouvelle version!
1  0 
Avatar de axel584
Membre actif https://www.developpez.com
Le 18/05/2021 à 11:13
Pour avoir travaillé un peu en scala sur des projets existants, je me suis rendu compte que certains bouts de code très orientés fonctionnels, peuvent être illisibles pour quelqu'un habitué aux langages procéduraux.
Et sur d'autres aspects, j'avais trouvé ça très bien pensé et très pratique.
1  0 
Avatar de
https://www.developpez.com
Le 18/05/2021 à 13:28
Citation Envoyé par grunt2000 Voir le message
Je ne sais pas si ce forum où nous sommes fait foi...
LOL. Heureusement que non... quand on voit certains pleurer parce que scala apporte des concepts qu'il faut apprendre mais qu'il sont contents de les avoir dans java 20 ans plus tard, ou qui viennent pleurer parce qu'on délocalise ou sous-paie des projets java...
2  1 
Avatar de loic38_01
Membre du Club https://www.developpez.com
Le 18/05/2021 à 13:31
Citation Envoyé par SimonDecoline Voir le message
LOL. Heureusement que non... quand on voit certains pleurer parce que scala apporte des concepts qu'il faut apprendre mais qu'il sont contents de les avoir dans java 20 ans plus tard,
Exactement, depuis Java 8 , beaucoup de fonctionnalités implémentées par Scala auparavent ont été ajoutée à Java (souvent à moitié mais c'est mieux que rien...)
0  0 
Avatar de loic38_01
Membre du Club https://www.developpez.com
Le 18/05/2021 à 14:43
Citation Envoyé par grunt2000 Voir le message
Encore heureux qu'il permette à Java de s'enrichir à son contact. Il utilise l'API Java sur la majorité des sujets. Puisqu'il n'a pas réussi à implémenter grand-chose par lui-même...
Ce n'est pas un langage comme C++, Python ou R dont les concepteurs ont écrit toutes les fonctions qu'ils proposent aux développeurs.
Ce serait gonflé si, en retour, il ne permettait pas à la communauté Java de profiter de ses avancées. Ce serait ingrat, pour dire les choses...
Personne n'a parlé du fait de "permettre d'en profiter", on parlait juste de son influence

Tu as raison pour le site des offres d'emploi, néanmoins le "remote" peut être une option très intéressante à ne pas néglicier surtout en ce moment, et là il y a du choix.
0  0 
Avatar de grunt2000
Membre éclairé https://www.developpez.com
Le 25/05/2021 à 20:19
D'ailleurs, je me posais la question : quand on ne l'utilise pas pour faire du Big Data, pour quel type d'applications va t-on se servir de Scala plutôt que d'un autre langage ?
0  0 
Avatar de sjrd
Expert éminent sénior https://www.developpez.com
Le 26/05/2021 à 16:13
Citation Envoyé par grunt2000 Voir le message
D'ailleurs, je me posais la question : quand on ne l'utilise pas pour faire du Big Data, pour quel type d'applications va t-on se servir de Scala plutôt que d'un autre langage ?
D'après le Scala Developer Survey 2019, seule une fraction (22.6%) des développeurs Scala l'utilisent pour du Data Science. Près de 50% rapportent l'utiliser pour du "Streaming data". D'autres applications sont les microservices, le Web front-end, la recherche, et "autre types de back-end".
0  0 
Avatar de grunt2000
Membre éclairé https://www.developpez.com
Le 17/05/2021 à 16:42
Scala doit remplacer Java, ça fait dix ans que c'est annoncé.
Alors il faut utiliser Scala, parce que sinon, il ne remplacera jamais Java, d'accord ?

Mais Scala pose le problème, justement, de n'être pas interopérable avec Java.
Oui, Scala peut appeler du Java facilement. Mais la réciproque n'est pas vraie.

Voici une application volumineuse, écrite en Java sous Spring-boot, avec objets métiers, services, web, des centaines de milliers de lignes de code Java. Elle profiterait peut-être de parcelles de code en Scala, mais c'est compliqué... Attendez, on me souffle : Si, si ! Suffit de faire un stub pour chaque classe, wrapper chaque paramètre et faire gaffe à chaque méthode !

On doit passer en Scala, mais il ne sait faire que les trois trucs pour lesquels il a été pensé, et surtout le Big Data. Et même lui, il s'y prend de manière compliquée, pas très lisible et parfois discutable.
Oui, Apache Spark est écrit en Scala et l'on est bien heureux de l'utiliser, lui.
Mais je suis passé dans deux grandes librairies informatique il y a deux semaines. Savez-vous ce qu'usent à présent tous les ouvrages parlant de Big Data et utilisant Spark ?
Python.

Ben oui, c'est normal. Il faut un an ou plus pour devenir un bon développeur Scala. Et ensuite, il ne sert à rien. Datavisualisation avec Scala ? MÊME PAS ! Si, si, je vous jure : il n'a RIEN ! C'est fort, hein ? Mais c'est vrai.
Scala, c'est le langage prétentieux, complexe, prompt à réduire le champ d'exercice des applications en leur ôtant des capacités à résoudre des sujets variés, tout en décroissant leur maintenabilité.
Java 17, 18 et plus vont rattraper ses rares apports utiles, et il restera dans sa niche.

À la niche !
2  3