Cela fait une décenie que Michel Schinz a annoncé la première mise en œuvre du langage de programmation Scala. Lors de l’annonce, Scala était décrit comme étant « un langage intégrant parfaitement le paradigme orienté objet et la programmation fonctionnelle » et « conçu pour exprimer les modèles de programmation communes de manière concise, élégante et typesafe ».
L'annonce originale cite :
Nous aimerions annoncer la disponibilité de la première mise en œuvre du langage de programmation Scala. Scala intègre parfaitement l’orienté objet et la programmation fonctionnelle. Il est conçu pour exprimer les modèles de programmation communes de manière concise, élégante et typesafe. Scala introduit plusieurs éléments novateurs au langage. Par exemple :
- Les types abstraits et les compositions mixin unifient les idées entre les objets et les systèmes de modules.
- Le pattern matching sur des hiérarchies de classes unifie l’accès entre le fonctionnel et l’orienté objet aux données. Cela simplifie considérablement le traitement des arbres XML.
- Le système flexible de syntaxe et de type permet la construction de bibliothèques avancées et de nouveaux langages spécifiques aux domaines.
Scala est également compatible avec Java. Les bibliothèques et les frameworks Java peuvent être utilisés sans code d’intégration ni déclarations supplémentaires.
L'implémentation actuelle de Scala s'exécute sur la machine virtuelle Java. Elle nécessite un JDK 1.4 et peut fonctionner sur Windows, MacOS, Linux, Solaris ainsi que la plupart des autres systèmes d'exploitation. Une version .Net de Scala est actuellement en cours de développement.
Bien que la version .Net ne soit plus maintenue, l'objectif était de fournir un langage commun qui fonctionnerait à la fois sur les deux machines virtuelles et qui serait portable entre les systèmes d'exploitation. Cependant, les progrès sur la JiT de la JVM et une dépendance croissante envers le bytecode Java ont poussé l'interruption de la version .Net, une fois Scala 2.10 publiée.
Scala a apporté la programmation fonctionnelle à l’écosystème des langages JVM et a directement stimulé la prochaine inclusion des lambdas (souvent appelées à tort closures) de Java 8 et des méthodes par défaut au sein des interfaces. Ces deux éléments ont été disponibles en Scala depuis les premiers jours par l'intermédiaire des fonctions et des traits, et leur introduction a fourni de nouvelles manières de programmation, plus concises et testables.
Avec le succès de Scala est apparue sa complexité, étant donné que les fonctionnalités du langage peuvent être utilisées à la fois pour une grande et pour une pauvre lisibilité. En permettant à tous les identifiants Unicode d'être utilisés comme noms de méthodes ou fonctions (y compris symboliques), la bibliothèque Scala standard s'est développée pour inclure des fonctions émoticônes telles que =:= , :+ et :\ entre autres. Le compromis de Scala est d'améliorer l'aptitude en écriture en dépit de sa lisibilité.
Enfin, Scala se considère toujours comme un langage de recherche, en essayant de nouvelles fonctionnalités et en rendant obsolètes les plus anciennes (comme le package Actors original, qui lui a apporté une gloire semblable aux coroutines de Go). Le bytecode généré varie d'une version à l’autre, ce qui signifie qu'il y a un nombre limité de projets open-source compilés lorsqu'il ne s'agit pas de la version actuelle de Scala. Et bien que la version 2.10 soit disponible depuis plus d'un an, la transition entre les principales versions de Scala est souvent pénible.
Avec la publication cette année de JAVA 8 qui apporte un sous-ensemble de fonctionnalités Scala à la JVM, il sera intéressant de voir ce que Scala propose comme valeur ajoutée. La compatibilité binaire apporterait stabilité au langage, mais semble toujours aussi lointaine comme c'était le cas il y a une décennie. Seul le temps nous le dira.
Où pensez-vous que Scala sera dans les dix prochaines années?