33 votes

Scala, le nouveau Java ?

Je viens de commencer à explorer Scala pendant mon temps libre.

Je dois dire que jusqu'à présent, je suis très impressionné. Scala se situe au-dessus de la JVM, s'intègre de manière transparente au code Java existant et possède de nombreuses fonctionnalités que Java ne possède pas.

Au-delà de l'apprentissage d'un nouveau langage, quel est l'inconvénient de passer à Scala ?

26voto

oxbow_lakes Points 70013

L'inconvénient, c'est que vous devez vous attendre à ce que Scala soit un peu brut de décoffrage :

  • vous obtiendrez une erreur cryptique interne au compilateur Scala.
  • le support IDE n'est pas aussi bon que celui de Java (le support de débogage non plus)
  • il y aura des interruptions de la rétrocompatibilité dans les futures versions (bien qu'elles soient limitées).

Vous devez également prendre le risque que Scala en tant que langage s'éteigne.

Cela dit, Je ne pense pas que tu regarderas en arrière. ! Mes expériences sont globalement positives ; les IDE sont utilisables, on s'habitue à la signification des erreurs cryptiques du compilateur et, si votre base de code Scala est petite, une rupture de compatibilité ascendante n'est pas un problème majeur.

Cela vaut la peine pour Option le monade la fonctionnalité des collections, fermetures le acteurs modèle, extracteurs, types covariants, etc. C'est un langage génial.

C'est aussi une grande personnel l'avantage de pouvoir aborder les problèmes sous un angle différent, ce que les constructions ci-dessus permettent et encouragent.

16voto

Daniel C. Sobral Points 159554

Certains des inconvénients de Scala ne sont pas du tout liés à la jeunesse relative du langage. Après tout, Scala n'a que 5 ans d'âge, et Java était très différent 5 ans après sa propre existence.

En particulier, parce que Scala n'a pas le soutien d'une entreprise qui le considère comme une priorité stratégique, les ressources de soutien qui lui sont destinées font plutôt défaut. Par exemple :

  • Absence de tutoriels complets
  • Qualité inférieure de la documentation
  • Localisation inexistante de la documentation
  • Bibliothèques natives (Scala utilise les bibliothèques Java ou .NET comme base pour les siennes)

Une autre différence importante est due à la façon dont Sun a vu Java et EPFL voit Scala. Sun voyait Java comme un produit destiné à attirer les entreprises. L'EPFL voit Scala comme un langage destiné à être meilleur que les langages existants, à certains égards particuliers (intégration OOxFonctionnelle, et conception de systèmes de types, principalement).

En conséquence, alors que Sun a rendu la JVM glacialément stable et Java totalement rétrocompatible, avec une dépréciation et une suppression très lentes des fonctionnalités (en fait, une suppression ?), les fichiers JAR générés avec une version de Scala ne fonctionneront pas du tout avec d'autres versions (un problème sérieux pour les bibliothèques tierces), et le langage reçoit constamment de nouvelles fonctionnalités tout en supprimant celles qui sont dépréciées, tout comme la bibliothèque de Scala. L'historique des révisions de Scala 2.x, qui a, je crois, à peine 3 ans, est impressionnant.

Enfin, en raison de tout ce qui précède, le support tiers pour Scala est débutant . Mais il est important de noter, cependant, que JetBrains ce qui rend argent de la vente de la IntelliJ IDEA supporte Scala depuis un certain temps, et ne cesse d'améliorer son support. Cela signifie, selon moi, qu'il y a une demande pour un support tiers, et que le support est appelé à augmenter.

J'en veux pour preuve la situation du livre. Il y a un an, il n'y avait aucun livre sur Scala sur le marché. Aujourd'hui, il existe deux ou trois livres d'introduction à Scala. sur le marché Le même nombre de livres devrait sortir avant la fin de l'année, et il y a un livre sur un framework web très important basé sur Scala, Ascenseur .

Je parie que nous verrons un livre sur ESME dans un avenir pas trop lointain, ainsi que des livres sur Scala et la concurrence. Le marché de l'édition a apparemment atteint le point de basculement. Une fois que ce sera fait, les entreprises suivront.

15voto

Feargal Points 106

J'ai été libéré de la laisse J2EE l'année dernière, je voulais faire quelque chose de nouveau après 12 ans de Java dans l'entreprise à construire de très grands systèmes pour certaines des plus grandes sociétés du monde.

J'avais essayé Ruby on Rails dans le passé. Après avoir construit quelques exemples d'applications, je n'ai pas aimé la sensation qu'il procure ni le fait que je doive écrire une tonne de tests unitaires pour couvrir des choses qui sont normalement faites par un compilateur.

Groovy sur Grails était mon prochain port d'escale. Je dois dire que j'aime bien ce système, mais il souffre des mêmes problèmes de typage dynamique que ROR. Ne vous méprenez pas, je ne dénigre pas Grails, qui est un excellent framework, et je continuerai à l'utiliser. Chacun d'entre eux a sa place, selon moi.

J'ai ensuite sauté sur Scala et j'ai maintenant construit une application hybride basée sur Scala et Spring MVC. Au début, il est difficile de travailler avec Scala, mais cela devient plus facile et plus productif au fur et à mesure que l'on y consacre du temps. J'ai atteint un point de basculement où je veux maintenant investir du temps dans Lift également.

La combinaison des livres "Programming in Scala" et "Beginning Scala" de David Pollak est un bon moyen d'apprendre le langage, ce dernier ayant un caractère moins académique.

Scala est encore jeune et a encore du chemin à parcourir. Je pense qu'il a un brillant avenir et je vois que la dynamique s'accélère déjà. Récemment, l'un des créateurs du langage Groovy a déclaré dans un billet de blog qu'il n'aurait jamais pris la peine de concevoir Groovy si Scala avait existé à l'époque.

Je pense qu'un peu plus de travail sur une meilleure intégration de l'API Java donnera à Scala le coup de pouce dont il a besoin pour gagner de nouveaux adeptes. L'intégration de base est déjà là mais je pense qu'elle pourrait être un peu plus soignée.

Oui, le support IDE existe mais il est basique pour le moment. Le support de refactoring puissant d'Intellij n'est pas encore là et cela me manque beaucoup. Le support compilateur + IDE avec un mélange d'autres plugins n'est pas encore mature. J'obtiens parfois des erreurs de compilation internes très étranges causées par la façon dont Scala s'assoit avec l'amélioration de JDO pour le moteur d'application Goggle. Il s'agit toutefois de petites choses qui peuvent être facilement corrigées. L'adaptation précoce de nouvelles technologies et de nouveaux langages s'accompagne toujours d'un peu de douleur. Mais ce peu de douleur peut produire un grand plaisir à l'avenir.

Si je regarde les capacités de Scala par rapport aux débuts de Java, il est à des kilomètres devant. Lorsque je suis passé du C++ à Java, la JVM n'était pas encore prête en termes d'évolutivité. Il y avait de nombreux dumps bizarres de noyaux de JVM sur différents systèmes d'exploitation. Tout cela a maintenant été corrigé en Java et la JVM est solide comme un roc. Scals fonctionne dans la JVM, ce qui lui donne une longueur d'avance sur l'intégration des plates-formes natives. Il se tient sur les épaules de géants !

Après des années de construction et de support d'applications d'entreprise, je vote pour un langage où un compilateur peut attraper la plupart des bogues non fonctionnels avant même que les tests unitaires ne soient construits. J'aime le contrôle de type mélangé à la puissance de la programmation fonctionnelle. J'aime le fait de faire du OO++.

Je pense que la communauté des développeurs décidera si Scala est l'avenir ou non. L'inconvénient d'adopter Scala maintenant serait qu'il ne prenne pas son élan et ne s'adapte pas. Il serait très difficile de maintenir une base de code Scala avec très peu de développeurs Scala. Cependant, j'ai vu Java sortir des ateliers clandestins et entrer dans l'entreprise pour remplacer le C++, et tout cela a été poussé de bas en haut par la communauté des développeurs. L'avenir nous dira ce qu'il en est pour Scala, mais pour l'instant, il a mon vote.

3voto

Roman Kagan Points 4037

Je ne pense pas qu'il y ait d'inconvénients. En fait, l'apprentissage d'un nouveau langage est très utile pour élargir vos connaissances en programmation. Scala peut vous apporter des éléments tels que les classes génériques, les annotations de variance, les limites supérieures et inférieures des types, les classes internes et les types abstraits en tant que membres d'un objet, les types composés, les autoréférences explicitement typées, les vues et les méthodes polymorphes.

3voto

fortran Points 26495

Je vais vous raconter ma petite expérience personnelle, et comment j'ai découvert qu'il n'était pas si facile d'intégrer Scala aux bibliothèques Java existantes :

Je voulais commencer avec quelque chose de facile, et comme je pensais que Scala était très bien adapté au calcul scientifique, je voulais faire un petit wrapper autour de JAMA (Java Matrix library)... Mon approche initiale était d'étendre le type Matrix avec une classe Scala, puis de surcharger les opérateurs arithmétiques et d'appeler les méthodes natives Java, mais.. :

  • La classe Matrix ne fournit pas de constructeur par défaut (sans argument).
  • La classe Scala a besoin d'un constructeur primaire
  • Je pensais qu'un bon constructeur primaire pourrait être celui acceptant un Array[Array[Double]] (première chose qui craint, cette syntaxe est beaucoup plus verbeuse et difficile à lire que Double[][])
  • Pour autant que je sache en lisant les manuels, les paramètres du constructeur primaire sont aussi implicitement des champs de la classe, donc je me retrouverais avec un Array[Array[Double]] dans la sous-classe Scala et un autre double[][] dans la superclasse Java, ce qui est plutôt redondant.

Je pense que j'aurais pu utiliser un constructeur primaire vide qui aurait initialisé la superclasse avec des valeurs par défaut (par exemple, un [[0]]), ou simplement créer une classe d'adaptateur qui aurait utilisé Jama.Matrix comme délégué, mais si un langage est censé être élégant et intégré de manière transparente à un autre, ce genre de choses ne devrait pas arriver.

Ce sont mes deux cents.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X