Question

Pour les 3 prochaines années, je vais devoir travailler avec la machine virtuelle Java (exigence de projet) en utilisant une API tierce partie très spécifique. Ils veulent Java mais j'ai été donné une marge de manœuvre pour se déplacer loin de Java. J'espérais que nous pourrions revenir au framework .NET pour que je puisse développer le code en F #, étant absolument en amour avec OCaml. développement .NET a été frappé par notre client. Il est un pas aller.

Je suis tourné vers la recherche, la lecture et la programmation autour des blogs piquer / forums essayer de comprendre quelle langue pourrait me plaire plus: Scala ou Clojure. Celles-ci semblent avoir la plus grande base communautaire / ventilateur. Être expérimenté avec les langues ML que je vois beaucoup de gens qui comparent Scala à ML. Cependant, il y a des défaitistes réels lors de cette comparaison. Si Scala était que près de ML ma productivité et la courbe d'apprentissage serait bénéfique pour faire ce commutateur.

L'internet est plein de désinformation et me demande si je souffre d'un tel. Je n'aime pas la syntaxe de Lisp (ne me! Pas de mal) mais si Scala a les verrues je lis (faible soutien IDE, dans le cadre de flux de tests unitaires, les problèmes de performance) Je me demande si Clojure est le meilleur option. Je veux être productif hors de la porte, en utilisant des fonctions comme objets de première classe, et de minimiser la douleur de la concurrence.

De toute façon, avant que je passe trop de temps sur Internet et ne fonctionne pas ... Je suis coincé avec la machine virtuelle Java, malade de Java et de se demander où aller?

Était-ce utile?

La solution

Avez-vous envisagé Groovy? Je ne pense pas que ce soit aussi fonctionnel que Scala / Clojure, mais il est certainement beaucoup plus fonctionnel que Java **. En général, je peux obtenir le même travail effectué en Groovy avec environ 50% du code qu'il me faudrait en Java.

Ceci est parce que Groovy est syntaxiquement similaire à Java et fournit un accès transparent aux bibliothèques JDK, mais l'ajout d'un grand nombre de caractéristiques linguistiques (fermetures, méta-programmation, propriétés) et le typage dynamique élimine presque tous les passe-partout associée à Java la programmation.

** Je veux dire fonctionnelle dans le sens de la « programmation fonctionnelle » plutôt que « fonctionner correctement »

Autres conseils

A mon avis, les deux Clojure et Scala n'ont pas un grand soutien IDE, si c'est vraiment important pour vous. Cela dit, voici ce que je peux recueillir de ma lecture et expérience.

pros de Scala

  • Plus rapide que Clojure grâce à la saisie plus statique
  • Plus près de ML (syntaxe, la programmation de type dirigée)
  • API standard Bigger (API de Clojure croître très lentement, parce qu'ils veulent se assurer qu'ils trouvent les meilleurs idiomes avant de les rendre publics. Cela dit, Clojure a encore des API supplémentaires semi-officielles)
  • Une meilleure intégration des pratiques avec le jeu d'outils Java typique (Clojure continue à faire des choix, donc moins fermement encore établi à cet égard)
  • Plus de Clojure (mais Clojure est construit au sommet d'une très ancienne et de base éprouvé: Lisp)
  • Les gens disent qu'il a des chances d'atteindre mainstream , alors qu'ils ne seraient pas dire la même chose au sujet de Clojure

pros de Clojure

  • Incroyablement facile, rapide et droit concurrency grâce à la STM à base MVCC et d'autres mécanismes d'accès concurrentiel
  • immutabilité par défaut permet de faire la bonne chose premier
  • API standard Plus stable
    • Quand les choses changent, généralement vous n'avez pas de réécrire le code existant
    • (collections de Scala sont en cours refaits à nouveau pour 2.8)
    • (J'ai aussi lu quelque part qu'il est de notoriété publique que la mise en œuvre des acteurs de Scala a besoin de repenser et réécrire.)
  • Plus facile à apprendre (petite langue, être un (très propre) Lisp)
  • en apprenant quelque chose de différent une occasion de grandir pour vous
  • La performance de Clojure ne fera que s'améliorer avec le temps; il y a encore place pour des optimisations agréables dans le compilateur
  • la vente liée Scala à Java se sent plus pénalisantes que de Clojure (interactions entre les systèmes de type statique de Scala et Java). On pourrait parfois dire la même chose Clojure (soutien de l'objet-Orientation est pas 1: 1 en forme, mais le soutien de ce sera bientôt mieux)
  • Rich Hickey a un don pour faire des choix qui mettent Clojure en position d'avoir des caractéristiques techniques de premier plan qui seront adoptées par d'autres langues dans les décennies suivantes. Et il a aussi un cadeau pour les expliquer . Utilisez-les donc aujourd'hui dans Clojure, ou attendre de les utiliser dans une autre langue un certain nombre d'années. :)

distribué concurrency

Si vos besoins sont distribués de concurrence, Clojure n'a encore rien pour ce à moins que vous exécutez sur le dessus de la terre cuite ou quelque chose de semblable, auquel cas vous serez en mesure d'exploiter toutes ses fonctions de concurrence. Si vous le faites, vous finirez avec une meilleure distribution expérience qu'avec les concurrency acteurs de Scala, l'OMI.

Conclusion

OMI Scala essaie de tout faire, et réussit à faire la plupart. Clojure ne cherche pas la même chose, mais ce qu'il met l'accent sur est plus que suffisant et réussit si bien que la plupart des gens vraiment savoir Clojure ne veulent pas revenir à autre chose. Divulgation : ma préférence personnelle va, bien sûr, à Clojure. J'espère que je suis en mesure d'être objectif dans ce que j'écrit.

Je vais aborder les points que vous soulevez à propos de Scala.

  • Support IDE :

    Scala n'a pas le même niveau ou le support IDE Java a - ou, pour cette matière, que F # doit avoir avec VS10.

    Cela dit, il a l'un des meilleurs (peut-être même les le mieux?) IDE prend en charge sur la JVM, en dehors de Java. En ce moment NetBeans est assez bon, et les gens ont toujours dit IDEA est encore mieux (par ouï-dire). Le plug-in Eclipse est instable si.

    Mais vous avez mentionné une gamme de 3 ans, et le support IDE pour Scala devrait être grandement améliorée une fois Scala 2.8 est sorti, car il fournira un compilateur support pour IDEs. Il n'y a pas de date de sortie définie, mais il semble être dans les six prochains mois, peut-être trois. Et le plugin Eclipse sera mis à jour à droite avec elle.

  • Dans le cadre de tests unitaires flux :

    Oui, si vous vouliez dire, il est dynamique, évolutif et bien soutenu, au lieu de la stagnation et abandonné. ScalaTest, spécifications et ScalaCheck sont des cadres de qualité supérieure, compatibles entre eux et compatibles avec d'autres frameworks Java et les bibliothèques, comme JUnit et JMock.

    Les cadres de test, en fait, sont presque une affiche de l'enfant de ce qui est possible avec Scala.

    EDIT: Scala a un support de test de l'unité de base dans sa bibliothèque standard (scala.testing.SUnit). Cependant, étant donné que de nombreuses alternatives supérieures, activement soutenues par et libres sont apparus, ce qui a été dépréciée et ne seront probablement pas partie de la bibliothèque livrée avec Scala 2.8.

  • Problèmes de performances :

    Je ne suis pas au courant de tout, à part le fait que vous pouvez écrire du code moche, comme avec tout autre langue. Les gens ne sont pas utilisés à la programmation fonctionnelle souvent faire des choses qui n'est pas efficace, comme ne pas utiliser la récursivité queue ou des listes concaténer, et le changement de paradigme qui Scala permet Apporte que la lumière.

    En tout cas, vous pouvez écrire du code Scala aussi vite que le code Java (encore plus rapide avec quelques fonctionnalités à venir). Et vous pouvez écrire du code Scala avec des caractéristiques fonctionnelles presque aussi vite que le code Java.

Très franchement, trouver un autre emploi.

Si vous êtes à passer les trois prochaines années sentiment de malaise sur ce que vous faites, vous devriez envisager la recherche d'alternatives plus attrayantes.

Même si vous parvenez à obtenir une langue que vous voulez, si vous faites partie d'une équipe (que je suppose que vous êtes) le reste de l'équipe pourrait ne pas aimer cette langue. Si le reste d'entre eux le code en Java et vous dans « remplir le vide » langage de programmation, alors les problèmes peuvent survenir.

Il est pas si mal après tout.

Discutez avec votre patron, de lui faire savoir comment vous vous sentez. Commencez à chercher des solutions de rechange et un « congé » gentil et professionnel.

Il n'y a aucune raison pour que vous ne pouvez pas avoir encore une bonne relation avec votre patron actuel. Si finalement ils ont un nouveau projet .net vous pouvez revenir. Parler avec eux. Laissez vos portes ouvertes.

Ce ne est pas vraiment un jeu à somme nulle, les apprendre!
ps: je vote pour Clojure , je trouve le plus amusant!

Vous devriez vous estimer heureux que vous pouvez utiliser la machine virtuelle Java, car la machine virtuelle Java devient de plus en plus populaire pour les langages de programmation alternatives que Java.

En plus de Java il y a Groovy, Scala , Clojure (un dialecte Lisp sur la machine virtuelle Java), de JRuby (Ruby sur la machine virtuelle Java), Jython s (python sur la machine virtuelle Java), Jaskell (Haskell sur la JVM), Fan (fonctionne sur la machine virtuelle Java, ainsi que le CLR .NET) et beaucoup plus, et il y a aussi OCaml-Java , OCaml qui fonctionne sur la machine virtuelle Java.

Alors, il y a beaucoup de choix dans les langages de programmation sur la machine virtuelle Java, de purement fonctionnelle à des scripts simples et langages OO anvanced.

Outils d'aide pour Scala et Clojure peut être immature, mais il est en constante amélioration.

Puisque vous aimez F #, alors Scala est très probablement votre meilleur pari. Je dis l'essayer et faire votre propre opinion - vous trouverez peut-être que les choses que les gens Gripe au sujet des choses qui ne comptent pas pour vous, ou des choses que vous pouvez travailler autour

.

Ne pas oublier JRuby et notez qu'un IDE est en option pour les non-Java

Je pense que vous avez une grande situation. Combien de personnes obtenir la permission de choisir la langue de mise en œuvre? Avec tout disponible pour la machine virtuelle Java ayant choisi votre environnement est pas beaucoup d'une restriction.

  • Vous ne aurez pas besoin un grand soutien IDE dans les langues moins verbeux
  • Dans un langage aussi puissant que Ruby sans déclarations de type, vous n'avez pas besoin d'un IDE tout
  • Scala a été développé spécifiquement pour guérir les-java-blues verbeux
  • vous la chance que le comte vous avez trois années de travail alignés: -)
  • Clojure peut être amusant et offre des modèles de conception fonctionnelle de sécurité accès concurrentiel

Noop? http://code.google.com/p/noop/ (expérimental si)

que vous rencontrez, Clojure ne fait pas en termes de soutien IDE et d'autres doutes mieux que Scala. Et pour une personne avec ML / F # fond (ou plus généralement que strictement, statiquement typé langues FP), vous trouverez certainement Scala beaucoup plus proche de ce que vous êtes habitué.

Si vous aimez ML pourraient vous intéresser CAL qui est plus ou moins Haskell 98 pour la machine virtuelle Java.

Il est de haute qualité et très stable, et a un bon support IDE Eclipse, mais n'est malheureusement plus en cours de développement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top