Haskell vs Erlang pour les services Web

30

Je cherche à démarrer un projet expérimental en utilisant un langage fonctionnel et j'essaie de décider entre Erlang et Haskell, et les deux ont des points que j'aime beaucoup.

J'aime le système de caractères forts et la pureté de Haskell. J'ai le sentiment que cela facilitera l'écriture de code vraiment fiable. Et je pense que le pouvoir de Haskell facilitera beaucoup ce que je veux faire.

Du côté négatif, j'ai l'impression que certains des cadres pour faire des trucs Web sur Haskell tels que Yesod ne sont pas aussi avancés que leurs homologues Erlang.

J'aime plutôt l'approche Erlang des threads et de la tolérance aux pannes. J'ai le sentiment que l'évolutivité d'Erlang pourrait être un atout majeur.

Ce qui m'amène à ma question, quelle a été l'expérience des gens dans la mise en œuvre de backends d'applications Web à la fois à Haskell et à Erlang. Existe-t-il des packages pour Haskell pour fournir certains des threads et acteurs légers que l'on a à Erlang?

Zachary K
la source
4
Si vous ne spécifiez pas d'exigences, il est impossible de le dire. Jetez simplement une pièce de monnaie ou quelque chose comme ça.
Vitor Py
1
Je n'ai aucune preuve de cette conclusion, mais l'utilisation d'Erlang par Facebook m'indique qu'il est à la fois puissant et fiable.
Matthew Read
1
@Matthew: Facebook utilise Erlang pour son système de chat, probablement pour ses qualités massivement parallèles.
Robert Harvey
3
Oui, utilisez Lisssssssp .
Mark C
8
Dans un ancien magazine Commodore 64, ils avaient un article sur les fausses langues. Le meilleur était "Lithp", qui était exactement comme lisp, sauf que le caractère "s" était exclu. Cela a forcé tous les développeurs de «lithp» à substituer un «th» au «s». :)
Berin Loritsch

Réponses:

17

La seule question que je me pose est: que fait votre service Web? Si le service Web est vraiment un problème fonctionnel, alors Haskell conviendra mieux.

Erlang n'est pas nécessairement un langage fonctionnel. C'est un langage procédural avec un modèle d'exécution très solide pour les systèmes massivement parallèles. Il a été conçu pour l'industrie des télécommunications, et il conviendrait certainement parfaitement pour répondre aux demandes de services Web.

Voir cette page * pour un aperçu des différences entre la programmation procédurale et fonctionnelle. (Toutes mes excuses à l'avance pour le laid noir sur la page cyan).

Si votre service Web effectue une bonne quantité de correspondance de modèles et d'application de règles, Haskel est votre choix. Si vous voulez juste une infrastructure évolutive qui ne soit pas trop différente des langues que vous connaissez probablement déjà, choisissez Erlang.

(* lien via la machine Wayback. Le fichier d'origine a été supprimé)

Berin Loritsch
la source
Ce sera quelque chose qui ressemble beaucoup à un réseau social. À ce stade, il y a 90% de chances que cela se fasse dans haskell.
Zachary K
12
Erlang est un langage fonctionnel, pas un langage procédural. Il a un grand support pour la correspondance de modèle et c'est une correspondance de modèle unique par bit, ce qui est très utile lors des services réseau.
Jonas
@Berin comme c'est toujours le problème avec les liens externes, il est maintenant mort.
thecoshman
@thecoshman, Mes excuses ... Après 3 ans, je ne me souviens même plus du contenu de ce qui était sur la page.
Berin Loritsch
Pas de soucis du tout: D ¬_¬ ne laisse jamais ça se reproduire. (avant que les gens paniquent, je plaisante)
thecoshman
11

Entre les deux que vous mentionnez, Haskell est définitivement académique, tandis qu'Erlang est utilisé dans des projets réels à haute évolutivité. Donc, des deux pour les services Web, je choisirais Erlang.

Mais je dirais que vous avez un troisième choix: le scala , une langue qui est fortement influencée à la fois par Haskell et Erlang. Il est utilisé pour créer des services Web de premier ordre comme Twitter ou Foursquare. Il y a même Lift , un framework web inspiré de Rails et Django, bien qu'avec une approche un peu différente et plus fonctionnelle. Foursquare utilise Lift.

vartec
la source
2
Acceptez votre réponse, à l'exception de la toute dernière phrase. L'ascenseur est très différent de Rails. Les rails sont modulaires, Lift est monolithique. Rails est un framework MVC, Lift ne l'est pas. Rails est orienté objet, Lift est plus fonctionnel.
dbyrne
@dbyrne: ok, édité
vartec
3
Le problème avec Scala pour les services Web est que les serveurs d'applications Java les plus populaires évoluent vraiment mal par rapport aux serveurs écrits en Erlang et Haskell.
Jonas
1
@Jonas: il y a par exemple vert.x vertx.io
vartec
Lift n'est plus le cadre de facto de Scala. C'est maintenant Play , qui est entièrement MVC et sans état. Je suis d'accord avec la réponse. Scala est un meilleur choix pour le monde réel. Il est plus facile d'obtenir des développeurs Scala qu'Erlang et Haskell.
Jus12
7

Habituellement, je dis: "apprenez des choses aussi loin que possible de votre zone de confort, cela fera de vous un meilleur programmeur même si vous ne l'utilisez jamais en pratique".

Dans ce cas, cela pourrait probablement signifier Haskell; mais Erlang devient non seulement presque socialement acceptable; mais les principaux points (processus légers, transmission de messages, grande évolutivité) arrivent sur de nombreuses autres plates-formes «pratiques», de sorte que les leçons apprises ont une applicabilité importante et immédiate sur des travaux plus «réels».

mon conseil: si c'est pour le plaisir, faites Haskell. si c'est pour l'entraînement, allez Erlang.

Javier
la source
son pour un projet de type travail. Je pense que ce sera probablement Erlang mais je peux faire du haskell.
Zachary K