web-dev-qa-db-fra.com

Investissement futur: Erlang vs. Scala

étant donné que la programmation simultanée devient de plus en plus importante, je me demandais ce que vous pensez d'Erlang par rapport à Scala à cet égard. Il me semble que Scala a un plus grand base d'utilisateurs et potentiellement un avenir meilleur qu'Erlang. En outre, Scala est une sorte de Java.

Je sais que ces questions sont toujours un peu subjectives, mais quel serait le meilleur investissement futur: Erlang ou Scala. Ou même une autre langue?

64
Mark

Erlang a été conçu pour les systèmes de communication simultanés à tolérance de pannes. Vous pouvez facilement écrire des serveurs qui gèrent un grand nombre de connexions réseau et (grâce à un garbage collector par processus Erlang) les serveurs peuvent conserver des caractéristiques en temps réel (c'est-à-dire que le serveur entier n'est pas suspendu jusqu'à la fin du GC). Vous pouvez également remplacer à chaud le code Erlang, le distribuer sur plusieurs nœuds, etc. C'est pourquoi (sans doute) le serveur XMPP le plus évolutif (ejabberd) est écrit en Erlang. Yaws (un serveur Web) est un autre exemple où Erlang excelle, voir: http://www.sics.se/~joe/apachevsyaws.html . Riak/Couch sont des exemples de construction de bases de données NoSQL avec Erlang. Ce sont les problèmes où Erlang est un excellent choix.

Mais Erlang VM n'est pas aussi rapide que JVM en termes de calculs bruts, donc dès que vous devez faire quelque chose de calcul intensif (par exemple la modélisation financière), JVM sera votre plate-forme préférée. De plus, Erlang's le modèle de concurrence (acteurs) est créé dans le langage. Si cela ne correspond pas au problème que vous essayez de résoudre, vous ne serez pas satisfait d'Erlang.

Scala est un langage plus "général" dans le sens où la simultanéité, l'évolutivité horizontale ou la tolérance aux pannes ne font pas partie du langage. Il est résolu au niveau des bibliothèques (c'est pourquoi il y a au moins 3 implémentations d'acteurs dans Scala). La bonne chose est que vous pouvez choisir un modèle de concurrence qui correspond à votre domaine. Par exemple, si vous avez besoin de mémoire transactionnelle logicielle (STM), choisissez simplement Akka et vous êtes prêt à partir ( http://akka.io/ ).

De plus, il y a tout l'argument selon lequel avec Scala vous pouvez tirer parti de vos "investissements JVM" et d'une multitude de bibliothèques JVM.

Vous n'avez donné aucune information sur le type de logiciel que vous souhaitez écrire avec l'une de ces langues, il est donc difficile de vous donner une réponse définitive. Cela dit, compte tenu de tout ce qui précède, Scala peut être un investissement "plus sûr" qu'Erlang (ne dénigrant pas du tout Erlang/OTP, c'est un bon langage/plateforme).

BTW. Si une concurrence sur une seule machine est importante pour vous, Clojure ( http://clojure.org/ ) ne doit pas être ignoré (également en langage JVM).

UPDATE1: Si vous aimez ce que propose Erlang mais pas sa syntaxe, jetez un œil à elixir-lang.org

UPDATE2: STM a été supprimé d'Akka - vous avez maintenant le choix (mix/match) entre les acteurs (non typés ou tapés) et les streams.

87
romusz

Peu importe Choisissez-en un et respectez-le pendant un certain temps. Apprenez des trucs, faites des choses sympas et continuez avec cette langue ou passez à une autre.

En ce qui concerne l'apprentissage de la programmation simultanée, l'un ou l'autre ira bien. La clé ici est que vous apprendrez quelque chose de nouveau et à moins qu'il n'y ait une offre d'emploi pour laquelle vous essayez d'être embauché qui utilise spécifiquement Erlang, cela n'a vraiment pas d'importance. De plus, même si cette ouverture nécessitait Erlang, vous auriez probablement de bonnes chances si vous connaissiez très bien Scala.

Pensez-y, tout le temps que vous avez passé à essayer de choisir une nouvelle langue aurait pu être mieux utilisé si vous en aviez choisi une et que vous avez déjà commencé à l'apprendre.

37
Robert Greiner

Les deux langues, à la base, ne sont pas si difficiles à apprendre, mais aussi à apprendre les fonctionnalités de concurrence qu'elles fournissent. En fait, Scala sont influencés par les acteurs d'Erlang. Je voudrais aller vers les deux, prendre votre temps pour regarder leur construction, faire des tests sur les problèmes de concurrence, etc.

Si vous connaissez Java, Scala sera plus naturel, car Erlang ressemble plus à prolog. Si, au contraire, vous êtes plus orienté vers des langages de type mathématique ou logique, commencez par Erlang.

5
Diego Sevilla