Haskell vs Erlang para servicios web

30

Estoy buscando comenzar un proyecto experimental usando un lenguaje funcional y estoy tratando de decidir entre Erlang y Haskell, y ambos tienen algunos puntos que realmente me gustan.

Me gusta el sistema de tipo fuerte y la pureza de Haskell. Tengo la sensación de que facilitará la escritura de código realmente confiable. Y creo que el poder de Haskell hará que algo de lo que quiero hacer sea mucho más fácil.

En el lado negativo, tengo la sensación de que algunos de los Frameworks para hacer cosas web en Haskell, como Yesod, no son tan avanzados como sus contrapartes Erlang.

Prefiero el enfoque de Erlang a los hilos y a la tolerancia a fallos. Tengo la sensación de que la escalabilidad de Erlang podría ser una gran ventaja.

Lo que lleva a mi pregunta, ¿cuál ha sido la experiencia de las personas en la implementación de backends de aplicaciones web tanto en Haskell como en Erlang? ¿Hay paquetes para que Haskell proporcione algunos de los hilos y actores livianos que uno tiene en Erlang?

Zachary K
fuente
44
Si no especifica los requisitos, es imposible saberlo. Solo tira una moneda o algo así.
Vitor Py
1
No tengo pruebas de esta conclusión, pero el uso de Erlang por parte de Facebook me indica que es poderoso y confiable.
Mateo leyó el
1
@Matthew: Facebook usa Erlang para su sistema de chat, presumiblemente por sus cualidades masivamente paralelas.
Robert Harvey
3
Sí, usa Lisssssssp .
Mark C
8
En una vieja revista Commodore 64, tenían un artículo sobre idiomas falsos. El mejor era "Lithp", que era exactamente como lisp, excepto que el carácter 's' estaba excluido. Eso obligó a todos los desarrolladores de 'lithp' a sustituir un 'th' por el 's'. :)
Berin Loritsch

Respuestas:

17

La única pregunta que tengo es qué está haciendo su servicio web. Si el servicio web es realmente un problema funcional, entonces Haskell se ajustará mejor.

Erlang no es necesariamente un lenguaje funcional. Es un lenguaje de procedimiento con un modelo de ejecución muy fuerte para sistemas masivamente paralelos. Fue diseñado para la industria de las telecomunicaciones, y definitivamente sería una excelente opción para responder a las solicitudes de servicios web.

Consulte esta página * para obtener una descripción general de las diferencias entre la programación procesal y funcional. (Disculpas de antemano por el negro feo en la página cian).

Si su servicio web está haciendo una buena cantidad de coincidencia de patrones y aplicando reglas, entonces Haskel es su elección. Si solo desea una infraestructura escalable que no sea muy diferente de los idiomas que probablemente ya conozca, elija Erlang.

(* enlace a través de la máquina Wayback. Se ha eliminado el archivo original)

Berin Loritsch
fuente
Será algo que se parece mucho a una red social. En este punto hay un 90% de posibilidades de que se haga en Haskell.
Zachary K
12
Erlang es un lenguaje funcional, no un lenguaje de procedimiento. Tiene un gran soporte para la coincidencia de patrones y es una coincidencia de patrones única por bit que es muy útil cuando se realizan servicios de red.
Jonas
@Berin, como siempre es el problema con los enlaces externos, ahora está muerto.
thecoshman
@thecoshman, Mis disculpas ... Después de 3 años, ni siquiera puedo recordar el contenido de lo que solía estar en la página.
Berin Loritsch
No te preocupes en absoluto: D ¬_¬ simplemente nunca dejes que vuelva a suceder. (antes de que la gente se asuste, estoy bromeando)
thecoshman
11

Entre los dos que mencionas, definitivamente Haskell es académico, mientras que Erlang se usa en proyectos de alta escalabilidad de la vida real. Entonces, de los dos para servicios web, elegiría Erlang.

Pero yo diría que tienes una tercera opción: Scala , un lenguaje que está fuertemente influenciado por Haskell y Erlang. Se utiliza para crear servicios web de primer nivel como Twitter o Foursquare. Incluso hay Lift , un marco web inspirado en Rails y Django, aunque con un enfoque un poco diferente y más funcional. Foursquare está usando Ascensor.

vartec
fuente
2
De acuerdo con su respuesta, excepto la última oración. El ascensor es muy diferente de los rieles. Los rieles son modulares, el elevador es monolítico. Rails es un marco MVC, Lift no lo es. Rails está orientado a objetos, Lift es más funcional.
dbyrne
@dbyrne: ok, editado
vartec
3
El problema con Scala para servicios web es que los servidores de aplicaciones Java más populares escalan realmente mal en comparación con los servidores escritos en Erlang y Haskell.
Jonas
1
@Jonas: hay por ejemplo vert.x vertx.io
vartec
Lift ya no es el marco de facto para Scala. Ahora es Play , que es totalmente MVC y sin estado. Estoy de acuerdo con la respuesta Scala es una mejor opción para el mundo real. Es más fácil conseguir desarrolladores de Scala que Erlang y Haskell.
Jus12
7

Por lo general digo: "aprende cosas lo más lejos posible de tu zona de confort, te hará un mejor programador incluso si nunca lo usas en la práctica".

En este caso, eso probablemente podría significar Haskell; pero Erlang no solo se está volviendo casi socialmente aceptable; pero los puntos principales (procesos ligeros, transmisión de mensajes, gran escalabilidad) están llegando a muchas otras plataformas 'prácticas', por lo que las lecciones aprendidas tienen una aplicabilidad grande e inmediata en trabajos más 'reales'.

mi consejo: si es por diversión, haz Haskell. si es para entrenar, ve a Erlang.

Javier
fuente
es para un proyecto de tipo de trabajo. Estoy pensando que probablemente sea Erlang, pero puedo hacer el haskell.
Zachary K