Scala, un langage de plus haut niveau sur la machine virtuelle Java
Créé par le LAMP group à l' Ecole Polytechnique Fédérale de Lausane (EPFL), conduit par le professeur Martin Odersky, Scala est un langage de programmation universel conçu pour permettre un code concis et simple. Il est proche de Java avec des emprunts à divers autres langages mais apporte aussi des innovations et des simplification, ce qui fait penser à JavaScript. Cela se traduit par un compilation plus lente.
Il s'inspire de la programmation orienté-objet autant que des langages fonctionnels. Selon les auteurs, le code Scala est de deux à trois fois plus concis que le code équivalent en Java. Mais il est aussi possible d'écrire du code aussi illisible que celui de Perl. Comme Perl d'ailleurs, il permet de faire la même chose de façons très différentes.
Le code peut être compilé en bytecode Java ou .NET et il est compatible avec leurs runtimes respectifs. En février 2015, Scala.js le compilateur en JavaScript est déclaré utilisable en production.
Le mot scala est un raccourci pour SCAlable LAnguage et signifie aussi escalier en italien, ce qui symbolise la programmation par paliers.
Le compilateur scalac est sous licence BSD. Depuis 2014, les principaux développeurs du compilateurs travaillent sur un nouveau langage, Dotty, version simplifiée de Scala, qui doit permettre de supprimer des problèmes difficiles à résoudre pour perfectionner ce compilateur.
Le 14 mars 2017, est annoncé Scala Native. (Article en anglais). Il s'agit de remplacer la machine virtuelle Java par LLVM et donc de créer des binaires exécutables. Cela s'accompagne d'une bibliothèque complète mais requiert toujours Java pour s'exécuter.
En mai 2021, Scala 3 arrive, proposant des simplications dans la syntaxe. Il est possible d'écrire du code en utilisant l'indentation comme le fait Python à la place des accolades. Elle sont maintenant facultatives, mais on peut toujours utiliser la syntaxe classique.
Caractéristiques de Scala
Il faut savoir que de nombreux éléments du langage comme par exemple return ou for ne fonctionnent pas comme on en à l'habitude dans les précédents langages.
Syntaxe et constructs:
- Fonctionnel: les fonctions sont des valeurs.
- Orienté-objet: toutes les valeurs sont des objets.
- Statiquement typé.
- Les déclarations sont inversées par rapport à C: on donne le nom d'une variable puis on définit son type.
- Une fonction est définie par l'opérateur def et l'en-tête est comme en Pascal.
- Pas de terminateur tel que ; à la fin des instructions (mais on peut l'ajouter en option).
- On définit une classe avec le constructeur en en-tête, ce qui est plus concis. Voir exemples.
- Les traits sont des interfaces comme en Java, mais dont les méthodes peuvent être définies ou non. Quand on utilise un trait pour compléter une classe, on doit définir les méthodes qui ne le sont pas. Donc leur action dépend du contexte d'utilisation.
- Les actors sont des objets qui fonctionnent en concurrence (en mode synchrone ou asynchrone) et communiquent par messages. On définit un acteur par une liste des messages qu'il peut recevoir. Il peut réagir à un message en envoyant un autre, ainsi un système d'échanges peut être créé.
- Pas de break et de continue.
- Le type val équivaut à une constante, mais on peut l'initialiser avec une variable.
- De nombreuses structures de collections: List, Vector, Set, Map, Seq, Pair, Triple.
- Du code XML peut être inclut dans le source, comme le fait le langage Scriptol.
- Scala 3 offre une syntaxe simulaire à celle du langage Python.
Autres possibilités:
- Fonctions anonymes.
- Fonctions de premier ordre.
- Une fonction peut contenir des fonctions.
- Classes génériques.
- On définit une case class pour le pattern matching, autrement dit pour sélectionnet une classe parmi d'autres dans une liste selon une condition.
- Méthodes polymorphiques. Les arguments peuvent changer de type.
- Extensible: une méthode peut être utilisée comme opérateur.
- Abstractions.
- Fonctions imbriquées.
- Expressions régulières définies par du code procédural.
- et de nombreuses autres caractéristiques originales...
Exemple de code en Scala, afficher "Salut le Monde!":
object HelloWorld { def main(args: Array[String]) { println("Salut le Monde!") } }
Définir une classe:
class voiture(vitesse:Integer, nom:String) { ... corps du constructeur et de la classe ... }
Pourquoi utiliser Scala?
Scala facilite l'évolution progressive des programmes dans le temps.
Le code Scala peut facilement s'interfacer avec du code Java préexistant. Il est en fait compilé en bytecode Java. On peut donc utiliser les deux langages dans un même programme, Scala offrant notamment l'avantage d'une plus grande concision.
Scala permet de traiter facilement des documents XML.
Le site social Twitter a abandonné le langage Ruby pour le backend et programmé ses services en Scala, cela pour profiter de la nature évolutive du langage. Le site augmente progressivement son audience et offre de nouveaux services avec le temps, d'où le besoin d'un langage qui facilite l'extension des programmes sans les réécrire.
Outils et documents
- Scala
Site du langage. Téléchargement du compilateur et manuel de référence. - Getting started
Comment faire et lancer un programme simple. - Scastie
Console en ligne pour tester du code Scala. - Scaladex
Répertoire des bibliothèques du langage. - Scala.js
Compile Scala en JavaScript 5.1. Il est possible d'utiliser les bibliothèques JS depuis Scala, mais cela requiert des conversion de types et de formats qui le rendent complexe. - Twitter et Scala
Interview des programmeurs du site social qui ont implémenté Scala. - On peut réaliser des applications pour Android avec Scala grâce au projet Scala For Android.