Le langage Scala

Présentation

Qu'est-ce que c'est ?

Scala est langage de programmation développé par l'équipe de Martin Odersky à l'École polytechnique fédérale de Lausanne en Suisse. Scala a été développé pour offrir un langage multi-paradigme, extensible et à syntaxe concise. L'une des particularité les plus notable de Scala est qu'il est basé sur le langage Java, et hérite ainsi de ses bibliothèques et de sa machine virtuelle. Le langage Scala est disponible depuis 2003.

Le langage Scala commence à être utilisé dans l'industrie : plusieurs entreprises ont annoncées le passage de certaines de leurs applications au langage Scala, comme Twitter ou le journal The Guardian. Un framework web nommé «Lift» basé sur Scala a lui aussi vu le jour.

Pourquoi un nouveau langage ?

À l'heure actuelle, il existe un grand nombre de langage de programmation. Pour tirer son épingle du jeu, Scala mise sur les différents concepts qu'il propose. Ces divers concepts ne sont pour la plupart pas innovants; l'apport du langage Scala vient en fait de l'association de ces différents concepts dans un seul et même langage. Ces concepts, décrits dans les paragraphes suivants, sont les suivants : «scalability», multi-paradigmes et compatibilité avec l'existant.

Scalability

Le langage Scala tire son nom du mot anglais «scalable», qui peut être traduit dans ce cas par «extensible». En effet, ce langage a la faculté de pouvoir être étendu en fonction des besoins des programmeurs. L'idée est de reléguer tout ce qui n'est pas indispensable au fonctionnement du langage dans des bibliothèques. En contre-partie, l'utilisateur utilise ces bibliothèques de façon transparente, en ayant l'impression d'utiliser les fonctions de base du langage.

La gestion des nombres réels d'une taille supérieure à 2^32 est un bon exemple pour illustrer ce propos. En Java, il faut utiliser la classe BigInteger. En Python, les grands nombres sont gérés nativement, mais cela rajoute systématiquement de nouvelles opérations processeur pour chaque opération sur un entier. Les concepteurs de Scala ont donc coupé la poire en deux : le développeur d'un programme Scala, après avoir choisi entre une gestion des entiers «classique» ou «grand nombre», manipulera ses entiers de façon identique quel que soit son choix.

L'extensibilité de Scala apporte deux principaux avantages : d'une part, les programmes écrits en Scala sont moins lourds car ils embarquent que ce qui leur est nécessaire, d'autre part, la syntaxe du langage est elle-même allégée puisque l'utilisation des fonctionnalités de Scala passe par l'appel aux fonctions des différentes bibliothèques.

Multi-paradigmes

Le premier paradigme de programmation proposé par le langage Scala est la programmation orientée objet. Ce paradigme a ajourd'hui fait ses preuves, est largement utilisé dans l'industrie, et est égalemment compris par la plupart des développeurs. C'est pour cette raison que ce paradigme ne sera pas détaillé dans cette présentation. Il est tout de même important de noter que Scala hérite de toutes possibilités offertes par le langage Java en matière de programmation orientée objet : héritage, polymorphisme, exceptions, etc.

Les deux autres paradigmes de programmation proposés par le langage Scala sont la programmation fonctionnelle ainsi que de la programmation impérative. La programmation fonctionnelle, ainsi que les différences qu'elle a avec la programmation impérative, sont détaillées dans la partie sur la programmation fonctionnelle.

Compatibilité

À l'heure actuelle, il est impensable de développer un nouveau langage de programmation qui ne fonctionne que sur une seule architecture et un seul système d'exploitation (à part dans des cas particuliers, comme le monde de l'embarqué). Les concepteurs de Scala ont décidé de ne pas gérer eux-même cette contrainte, et de compiler les programmes Scala en bytecode Java, exécutables sur la machine virtuelle Java. De cette manière, tous les systèmes d'exploitation et toutes les architectures qui ont une machine virtuelle Java fonctionnelle peuvent exécuter du code Scala.

Cette réutilisation de la machine virtuelle Java a un autre avantage de taille : du code Java peut être appelé à tout moment depuis un programme Scala. L'intérêt principal est la possibilité d'utiliser des bibliothèques Java sans avoir besoin de les réecrire ou de les adapter.

Ancêtres

Comme dit précédemment, le langage Scala propose un grand nombre de concepts de programmation. Ces concepts ont pour la plupart déjà été proposés dans d'autres langages de programmation, dont Scala s'est inspiré.

Utilisation

Le langage Scala peut être utilisé de trois façons différentes : en le compilant, au travers d'un interpréteur ou encore dans un script.

Compilé

Les fichiers de code Scala ont pour extension «.scala», et se compilent avec l'exécutable scalac. Comme en Java, la compilation crée des fichiers avec l'extension «.class», où chaque fichier contient le bytecode d'une classe. Le programme se lance grâce à l'exécutable scala en lui passant la classe dans laquelle se trouve le point d'entrée du programme.

$ scalac HelloWorld.scala
$ scala HelloWorld
Hello, World!

Interprété

Le langage Scala peut également être utilisé dans un interpréteur. Pour mémoire, un interpréteur permet d'exécuter à la volée des insctructions entrés par l'utilisateur. L'interpréteur Scala va en plus afficher la valeur retournée par l'instruction entrée, si celle-ci retourne quelque chose. Pour lancer l'interpréteur Scala, il suffit de lancer le binaire scala sans option.

$ scala
Welcome to Scala version 2.9.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_02).
Type in expressions to have them evaluated.
Type :help for more information.

scala> println("Hello, World!")
Hello, World!

scala> val i : Int = 42
i: Int = 42

scala> 40 + 2
res1: Int = 42

La capture ci-dessus illustre le fonctionnement de l'interpréteur Scala. D'abord, l'interpréteur Scala est lancé depuis la console. Ensuite, la commande d'affichage est utilisée, l'interpréteur affiche donc «Hello, World» à l'écran. Puis la valeur 42 est assignée à la variable «i», variable qui est elle-même déclarée à ce moment là. Enfin, la somme 40 et de 2 est effectuée; l'interpréteur Scala place alors le résultat dans la variable res1 (le résultat de la N-ème instruction non assigné à une variable sera placé dans resN).

Certains propos de ce site sont illustrés grâce à des exemples faits à l'aide de l'interpréteur. Ainsi, il est important de bien comprendre le comportement de l'interpréteur face aux instructions entrées ci-dessus.

Dans un script

L'écriture d'un script en Scala est très simple : il suffit de placer du code Scala dans un fichier texte et de passer le nom de ce fichier en argument au binaire scala. Ce binaire va s'occuper tout seul de la compilation et de lancer l'exécution du programme. L'exemple suivant permet de créer un script très simple affichant «Hello, World!» à l'écran.

$ printf "println(\"Hello, World\")" > script.scala
$ scala script.scala 
Hello, World