82 votes

Sur la Performance et l’interopérabilité Java : Clojure vs Scala

J'ai déjà lu des différents comptes de Clojure vs Scala et alors que je me rends compte que les deux ont leur place. Il ya quelques considérations que je n'ai pas acquis une explication complète quand il s'agit de comparer les deux Clojure avec Scala:

1.) Lequel des deux langues est généralement plus rapide? Je me rends compte que cela peut varier d'un langage à l'autre, mais une évaluation générale de la performance serait utile. Par exemple: je sais que Python dictionnaires sont vraiment rapide. Mais dans l'ensemble, il est beaucoup plus lent langage que Java. Je ne veux pas aller avec Clojure et d'exécuter ce problème en bas de la route.

2.) Comment est l'interopérabilité avec Java? Tout ce que j'ai lu jusqu'à présent est que la Scala a native des collections de types qui font qu'il est un peu maladroit de s'intégrer à un grand Java à base de code, alors que Clojure suit un simple objet iterable/Itérateur centrée sur le moyen d'inter-opérer avec les classes Java. Plus de pensées et de détails à ce sujet?

En fin de compte, si elle est assez proche de tirage entre clojure et scala, je pourrais essayer les deux. Une chose à propos de Clojure est la langue semble très simple. Mais là encore, Scala a une très flexible type de système. Mais, je sais que Scala est rapide (basé sur de multiples comptes personnels). Donc, si Clojure est significativement plus lente: je voudrais savoir plutôt tôt que tard.

73voto

DigitalRoss Points 80400

Je pense que l'une ou l'autre langue sera assez rapide pour vous. Lors de la comparaison de Python et Java, il semble un peu déraisonnable de blâmer la langue de la différence de vitesse. Java est compilé JIT (sauf sur les appareils mobiles*) alors que Python est interprété. Juste parce que les deux utilisent un bytecode ne signifie pas que les implémentations ont même à distance des performances comparables. Mais les deux Scala et Clojure sont JVM de langues, de sorte qu'ils devraient avoir le même rendement.

Scala est un peu de la mise en œuvre des avantages sur Clojure et je m'attends à un peu plus de performance. Bien que la Scala de typage statique devrait normalement se traduire par un avantage de vitesse sur Clojure du duck-typing, Clojure n' support de type hinting ce qui peut accélérer code considérablement. Éventuellement, ordinaire Scala est plus rapide qu'à l'ordinaire Clojure, mais vous avez seulement besoin d'optimiser les goulets d'étranglement. Plus d'un programme du temps d'exécution est générée par une petite quantité de code.

Concernant l'interopérabilité w/ Java, Scala est plus proche de Java, mais je suis sûr que les deux langues fonctionnent bien. Dans la Programmation Clojure Stuart Halloway écrit: "[vous pouvez accéder à] tout ce que vous pouvait atteindre à partir du code Java.".

Et depuis Scala auteur Martin Odersky écrit du Soleil compilateur Java, je pense que pas de balles, ont été abandonnées sur la Scala de côté, soit. :-)

Vous auriez du mal à choisir deux de mieux les langues, bien que j'aime Ruby aussi. Pourquoi êtes-vous inquiet au sujet de qui on essayer? Pourquoi ne pas essayer les deux? Scala est plus susceptible d'être "la prochaine Java", alors qu'il est difficile d'imaginer que Lisp va enfin décoller, après ne pas le faire pour les plus de 50 ans. Mais il est clair que Lisp est sur son propre niveau d'abstraction, et Clojure est assez simple, Scala + Clojure ne sera pas beaucoup plus difficile que de simplement (assez complexe) Scala et je suis sûr que vous serez heureux vous avez fait.

Et pour que la matière qu'elles interagissent...

* dalvik (android JVM) a obtenu un compilateur JIT dans la version 2.2 en 2010

32voto

Daniel C. Sobral Points 159554

Avec le présent JVM Scala a un avantage sur le compte de statiquement typé, comme la JVM de soutien pour le typage dynamique -- réflexion -- est lente. En fait, on Scala fonctionnalité qui doit être mis en œuvre par les mêmes techniques, les types de construction, est souvent mis en garde contre pour cette raison.

Aussi, Scala accepte mutable objets, il suffit de bien, et certains algorithmes sont juste plus rapide à mettre en œuvre avec la mutabilité.

Comme les deux Scala et Java sont essentiellement basées sur la classe de langues, qu'elles interagissent de plus en plus facilement. Ou, peut-être, de manière plus harmonieuse. Une classe Java est une classe à la Scala, et un Scala classe est une classe Java. Des problèmes peuvent surgir quand il s'agit de la Scala de singletons ou Java statique membres, en particulier quand il y a un cadre impliqués attend des choses à travailler d'une certaine façon.

Donc j'irais avec Scala sur deux de ces comptes. Clojure est, à bien des égards, une meilleure langue, et il a certainement des caractéristiques très intéressantes présente pas (pour l'instant) sur Scala, mais vous récolter les bénéfices en prenant pleinement fonctionnelle. Si vous avez l'intention de le faire, alors Clojure est très probablement mieux. Si vous ne le faites pas, alors vous devriez probablement rester avec Scala.

21voto

Jesper Points 65733

Notez que Clojure et Scala sont deux totalement différents types de langages de programmation - Clojure est une fonctionnelle le langage Lisp-comme la langue, elle n'est pas orientée objet. Scala est un langage orienté objet qui a la programmation fonctionnelle fonctionnalités.

À mon avis, les fonctionnalités et les concepts d'une langue (fonctionnelle, OO, ...) sont beaucoup plus importants critères de choix d'une langue que la performance (d'un particulier de la mise en œuvre de cette langue) - bien que je comprends que vous ne voulez pas m'enfermer dans une langue qui n'est pas performant de mise en œuvre disponibles.

J'irais pour Scala, parce qu'il est orienté objet, mais vous permet aussi d'apprendre la programmation fonctionnelle (si vous êtes intéressés). D'autre part, si vous n'avez pas de soins sur OO et vous voulez apprendre "pure" de la programmation fonctionnelle, essayez de Clojure.

15voto

Bill K Points 32115

Les statistiques produites par le «Jeu de référence pour le langage ordinateur» sont le mieux, que vous allez probablement trouver.

Elles sont détaillées et vous pouvez comparer plusieurs langues. Le problème est qu’ils ne couvrent pas Clojure  :(

Cela dit, il est assez facile de présenter quoi que ce soit--il est tous open-source.

Les statistiques disent que la Scala est sacrément rapide.

9voto

Kevin Peterson Points 4456

Sur l'interopérabilité, je ne peux pas parler pour Clojure, mais je m'attends à être dans une situation similaire à celle de la Scala.

Il est trivial à l'appel Java Scala.

Il est facile d'appeler Scala à partir de Java, tant que vous vous conformez votre API externe pour les points communs entre Scala et Java. Par exemple, un Scala objet est utilisé, à certains égards, comme statique méthodes en Java, mais ce n'est pas la même chose. Scala classes peut les compiler en un nombre de classes avec les noms drôle en Java.

Vous n'aurez pas envie de mélanger et assortir beaucoup. Bâtiment Scala ou Clojure qui utilise beaucoup de bibliothèques Java est très faisable. Vous pouvez bien sûr un appel dans ce composant à partir de Java, mais ce que vous n'allez pas vouloir faire est d'essayer de consommer une API Scala prévu pour une utilisation par Scala de programmes à partir de Java.

SVN prétend être "le CVS de fait la droite". De mon point de vue, la Scala est de Java.

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