Par rapport à Scala 2, la syntaxe est légèrement épurée : notamment, il n’y a plus moyen d’écrire directement du XML dans du code Scala ; le langage fournit moins de types, mais des constructeurs revenant aux fondamentaux. La différence principale par rapport à Scala 2 se situe au niveau théorique : Dotty se base sur le modèle de calcul DOT (plus simple que les machines de Turing ou le calcul lambda, par exemple, mais surtout plus adapté au code réel). Cela permet de réaliser des preuves formelles à propos de morceaux de code. Ce modèle de calcul est forcément réduit par rapport aux fonctionnalités du langage, mais la plupart des constructions syntaxiques peuvent se réécrire dans ce modèle.
Quelques nouveautés par rapport à Scala 2 peuvent déjà être notées, comme les types d’intersection (un objet passé en argument à une fonction doit posséder plusieurs traits) et d’union (au moins un trait).
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | def f(x: Resettable & Growable[String]) = { // Intersection : à la fois Resettable et Growable[String] x.reset() x.add("first") } def help(id: UserName | Password) = { // Union : soit un UserName, soit Password (soit les deux) // ... } |
Code : | Sélectionner tout |
1 2 3 | trait Greeting(val name: String) { def msg = s"How are you, $name" } |
Code : | Sélectionner tout |
1 2 3 | enum Color { case Red, Green, Blue } |
Sources : Announcing Dotty 0.1.2-RC1, a major step towards Scala 3, 0.1.2 release notes.
Plus de détails sur DOT.