Le but de cet article est de présenter brièvement Scala et de regarder comment il s’inscrit dans l’écosystème de la JVM.
Java, une impasse évolutive ?
Le langage Java semble avoir atteint ses limites évolutives (Java: Evolutionary Dead End). Il est désormais délicat d’y ajouter de nouvelles fonctionnalités sans complexifier d’avantage le langage et la rétro-compatibilité. Suite à de nombreux ajouts Java est devenu compliqué, il suffit de feuilleter le livre ‘Java Puzzlers’ pour s’en rendre compte. La programmation concurrentielle en Java, malgré des efforts louables (java.util.concurrent), est loin d’être l’outil le plus adapté. Cette forme de programmation sera nécessaire dans le futur car les applications devront profiter au maximum des multiples processeurs (The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software).
Scala, un langage hybride:
Il existe quelques potentiels successeurs à Java, Scala est particulièrement bien placé: Scala peut être compilé en bytecode Java, il est interopérable avec la JVM et Java ! C’est un langage statiquement typé, alliant l’orienté objet pur et le fonctionnel impur.
Martin Odersky, le créateur de Scala, a reussi à prendre ce qu’il y avait de bon dans de nombreux langages (A Brief History of Scala).
Le concept principal du langage est d’être facilement extensible, il peut ainsi être utilisé pour écrire de simples scripts ou pour réaliser des projets de grande envergure. Les deux paradigmes utilisés dans Scala sont complémentaires. L’idée est de ne pas imposer un paradigme unique et de laisser ainsi le choix de l’approche au programmeur.
Tout est objet:
La programmation objet a donné naissance aux patrons de conception (design patterns), elle est difficilement contournable. Dans Scala, tout est objet, il n’y a pas de types primitifs comme en Java. Le concept Objet a été poussé jusqu’au bout, toute valeur est un objet et toute opération est un appel de fonction. Les fonctions sont également des objets.
Tout est valeur:
La programmation fonctionnelle est idéale pour la programmation concurrentielle, car elle prône l’immutabilité. Elle permet de construire des objet de complexité croissante par composition car une fonction est valeur. On note également que Scala supporte le concept d’acteurs (Scala Actors), un concept adapté à la programmation concurrentielle emprunté de l’Erlang.
Une syntaxe épurée:
La syntaxe s’inspire de Ruby, Java, Smalltalk, langages ML, etc. Scala peut être dit dynamique d’un point de vue purement syntaxique. La force est que sa syntaxe ressemble à celle d’un langage dynamique alors que Scala est statiquement typé, vu le succès qu’ont eu les langages dynamiques ces dernières années rien que pour leur syntaxe, ceci est un aspect important.
Passons à quelques citations notables concernant Scala:
- If I were to pick a language to use today other than Java, it would be Scala.*
– James Gosling, creator of Java.
On my radar, the current best exit strategy for Java is Scala.
– Bruce Eckel, author of Thinking in Java.
Java: Evolutionary Dead End by Bruce Eckel (January 3, 2008)
*
Scala is not an extension of Java, but it is completely interoperable with it.*
– Martin Odersky, creator of Scala, co-designer of Java generics and author of the current javac reference compiler.
I can honestly say if someone had shown me the Programming in Scala
book by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I’d probably have never created Groovy.
– James Strachan, creator of Groovy.
Scala as the long term replacement for java/javac? (Monday, 6 July 2009)
Qui utilise Scala ?
Twitter !
http://www.artima.com/scalazine/articles/twitter_on_scala.html
Siemens:
http://www.scala-lang.org/node/1154
Novell Pulse:
http://www.novell.com/products/pulse/
Popularité de Scala:
http://www.scala-fr.org/popularite-de-scala/
Conclusion:
Scala n’est pas forcément en concurrence avec Java car il est compatible avec ce dernier. Scala apporte son lot de complexité, ceci est indéniable, mais la ‘simplicité’ de Java peut être considérée comme une limitation. Scala est plus concis que Java et par sa nature hybride il s’adapte facilement à de nombreux problèmes.
Liens:
Si vous souhaitez apprendre Scala, je vous recommande de lire le livre ‘Programming in Scala‘. Je ne prétends pas avoir lu tout le livre, mais ce que j’ai pris le temps de lire m’a montré à quel point le langage est bien pensé. Pour ceux qui sont dans le monde du web jetez un coup d’oeuil sur le framework ‘Lift‘. Pour les plus pressés regardez ‘A Tour of Scala‘.
- http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html
- http://www.indicthreads.com/7501/scala-projected-as-the-next-java-likely-or-far-fetched/
- http://www.myscience.ch/wire/informatique_scala_va_t_il_damer_le_pion_a_java-epfl
- http://www.artima.com/scalazine/articles/twitter_on_scala.html
- http://www.artima.com/weblogs/viewpost.jsp?thread=163733
- http://www.artima.com/weblogs/viewpost.jsp?thread=221903
- http://www.gotw.ca/publications/concurrency-ddj.htm
- http://java.dzone.com/articles/call-fresh-scala
- http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=scala+neward
- http://www.scala-lang.org/node/104
- http://www.ibm.com/developerworks/library/x-scalaxml/
- http://www.artima.com/scalazine
- Is Scala or Clojure poised for stardom? http://www.javaworld.com/community/node/1720
- http://www.javaworld.com/javaworld/jw-10-2008/jw-10-popular-scripting-languages.html