Alors maintenant, Eclipse a offert Xtend et JetBrains offre Kotlin - qui semblent tous deux être des versions édulcorées de Scala. Ma question est pourquoi? J'ai un peu joué avec Scala et ce n'est pas si difficile. S'agit-il simplement d'une réaction à la difficulté inhérente du passage de l'impératif au fonctionnel ou y a-t-il autre chose à l'œuvre ici?
EDIT: Excuses. En relisant la question telle que je l'ai publiée à l'origine, je peux voir où cela ressemble un peu à la pêche à la traîne. La façon dont j'ai formulé la question semblait être la meilleure façon de poser la question. J'ai vu des articles de blog selon lesquels "Scala est trop dur / Scala est trop complexe" et aussi "Kotlin est une tentative de faire Scala mais plus simple". Je vais laisser le libellé tel qu'il était à l'origine, mais honnêtement, je n'essayais pas de troll.
la source
Réponses:
À mon humble avis de quelqu'un qui a programmé en Java au cours des 7 dernières années et étant mon langage le plus fort, je trouve Scala assez étranger et j'ai du mal à m'y habituer.
Xtend ressemble plus à Java et a pu écrire une application simple avec elle beaucoup plus rapidement. Certes, je ne me suis pas donné assez de temps avec Scala, mais je comprends certainement pourquoi certains peuvent être désactivés par cela.
Cela étant dit, les gens choisiront un enfer familier plutôt qu'un paradis inconnu.
la source
JetBrains a une page wiki comparant Scala à Kotlin, et il semble y avoir quelques choses que Kotlin fait et Scala ne fait pas:
Donc, appeler Kotlin une descente d'eau Scala est probablement une simplification excessive. Quant à Xtend, je pense qu'il cible principalement les utilisateurs Xtext, plutôt qu'un public plus large. Une différence majeure avec Scala est que Xtend compile en Java plutôt qu'en bytecode.
Un autre langage "Java killer" que vous devriez ajouter à votre liste est le Ceylan de Red Hat , bien que je ne sache pas si et comment il se compare à Scala.
la source
J'utilise Scala comme langue principale depuis l'année dernière (avec Java en seconde position, tous deux dans une grande base de code Java héritée.) Je dois encore rechercher des fonctionnalités assez basiques si je ne les ai pas utilisées dans un tandis que. Bien sûr, vous pouvez écrire du Scala rapidement, mais c'est un langage extrêmement riche en fonctionnalités, et cela prend beaucoup de temps à maîtriser.
De plus, sa complexité n'est pas seulement un problème pour les humains, mais aussi pour les IDE et les compilateurs. Celyon et Kotlin se compilent directement pour JavaScript assez propre. Scala peut produire du JavaScript, via GWT, mais y arriver est compliqué et la sortie GWT n'est ni lisible ni conçue pour jouer correctement avec JavaScript ou HTML externe.
Je suis nettement plus productif en Scala qu'en Java, et le code est plus compact et lisible (une fois que vous connaissez un peu Scala.) Mais sa complexité me fait hésiter à le recommander à d'autres. Une langue avec 20% de la complexité mais 80% de la capacité serait une alternative bienvenue.
[Modifié pour supprimer la mention du code hérité, voir le commentaire ci-dessous.]
[Addendum 2017: Scala prend désormais en charge JavaScript comme cible de génération, tandis que Kotlin a continué d'ajouter des fonctionnalités qui ont du sens pour un remplacement Java / Groovy / JavaScript de type Scala. Ce sont maintenant des langues plus distinctives que lorsque j'ai écrit cela pour la première fois.]
la source
+:
extracteurs par exemple). J'espère que la programmation à Scala sera mise à jour dans un proche avenir. Pour 2.11, certaines choses s'améliorent encore. Le stdlib est déjà libéré des dépréciations et va également rétrécir un peu. Peutscala.util.parsing
-être sera - t - il déplacé en dehors de stdlib également. Nous verrons ...::
,::=
ou+:=
qui précède, mais la plupart des gens veulent:+=
ce qui est ajouté, mais ce n'est pas efficace pour une liste.JetBrains a clairement énoncé ses objectifs pour Kotlin :
la source
J'ai utilisé Scala quelques mois dans Eclipse avec Play Framework. J'aime la langue mais il y a aussi des choses que je n'aime pas.
Pour moi, la raison de passer de Java à un autre langage est d'être plus productif.
Jusqu'à présent, je n'ai pas été plus productif avec Scala. L'une des raisons est le manque de bonne prise en charge de Scala dans Eclipse, le plug-in Scala est mauvais (par exemple, l'indentation échoue) et n'a pas encore beaucoup de fonctions (par exemple pas de "hiérarchie des appels ouverts"). Le compilateur Scala est également lent, ce n'est peut-être pas un problème, mais j'utilise Scala avec Play Framework, qui compile le code pour chaque demande, et là, la vitesse du compilateur est importante.
la source
Je ne sais pas pour Kotlin, mais Scala et Xtend sont deux bêtes très différentes.
Contrairement aux dictons courants, Scala n'est PAS un meilleur Java. Scala est un langage beaucoup plus en vedette que Java, avec sa propre syntaxe et sémantique, et son propre pack de bibliothèques de base.
Xtend EST un meilleur Java. Il conserve la sémantique Java et améliore sa syntaxe. Chaque ligne de code Xtend peut être directement traduite en un tas de lignes de code java. Il n'y a pas non plus d'exécution supplémentaire.
Je pense que les deux approches sont bonnes, bien que différentes. Je n'aime pas Scala (en tant que langue), mais je n'aime pas avoir des pots Scala ajoutés à mes projets. Je ne peux pas utiliser Scala correctement dans Android non plus (cela ajoute des problèmes de poids et de performances). Xtend n'est pas autant présenté, mais c'est ok pour moi (ça vaut le coup de l'utiliser que le langage Java) et il fonctionne sur toutes les plateformes comme si j'écrivais directement en Java.
Je crois que les deux langues couvrent des niches différentes et peuvent coexister sans interférer l'une avec l'autre. À mon humble avis, Scala est tout simplement trop complexe, n'ajoutant rien de nouveau. Si vous voulez devenir plus fonctionnel et moins OO, choisissez simplement l'un des nombreux langages fonctionnels plus simples, comme Clojure ou JHaskell. Si vous voulez juste Java avec une meilleure syntaxe et un peu de programmation fonctionnelle, Fantom serait aussi bon que Scala (il ressemble beaucoup à C #).
Mais je trouve que Xtend est à un point doux entre toutes ces langues. Il ajoute tous ces modèles syntaxiques que je voulais pour Java, en gardant les bonnes parties de Java (sa sémantique). Pensez-y comme Coffescript pour Java.
Et le support Eclipse est superbe ...
la source