¿Hay cosas que Elixir pueda hacer que Erlang no pueda, o viceversa?

102

Esta pregunta está en el contexto de Beam VM y las capacidades que proporciona, no en el contexto general de lo que puede hacer un lenguaje completo de Turing. Quiero invertir algo de tiempo para aprender Erlang puro o Elixir. Entiendo las diferencias básicas entre los dos y me inclino por Elixir debido a las macros, una mejor sintaxis y un desarrollo más rápido del lenguaje este día.

Mi pregunta es: si elijo Elixir, ¿me toparé con algo que no puedo hacer en él, pero que puedo hacer en Erlang? ¿Puedo usar todas las cosas de OTP, todas las bibliotecas de Erlang, recargar código, etc. con Elixir?

No estoy preguntando por la preferencia de alguien entre los dos; solo hechos sobre las posibilidades de los idiomas. Preferiblemente de alguien que haya usado ambos en producción.

Saša Šijak
fuente
19
@hedgehog no es una opinión, un hecho. La pregunta es "Mi pregunta es si elijo Elixir, ¿me toparé con algo que no puedo hacer, pero que puedo hacer en Erlang? ¿Puedo usar todas las cosas de OTP, todas las bibliotecas de Erlang, recargar código, etc. con Elixir?" y la respuesta se basa en hechos, no en opiniones.
Saša Šijak
4
Para esa pregunta, la respuesta es: todo lo que puedes hacer en Erlang es posible en Elixir. Pero el título sugiere que la pregunta es en qué debería invertir y aquí la respuesta es "depende". ¿Qué quieres hacer? Para aplicaciones web, Elixir es mucho mejor, porque fue creado para resolver este problema. Para algunos tipos de sistemas distribuidos, puede encontrar la simplicidad de Erlang superior. La falta de funciones suele ser lo bueno. Aprender solo Erlang te ayudará a concentrarte en lo más importante: OTP.
tkowal
2
@ SašaŠijak Cambié el título de la pregunta, para que la OMI refleje mejor de qué se trata, revísela si no está de acuerdo.
Paweł Obrok
2
@ PawełObrok gran edición, resume correctamente lo que estaba interesado en saber
Saša Šijak
3
cada vez que hago este tipo de preguntas obtengo -10
votos negativos

Respuestas:

37

Solo para comenzar, solo he usado Elixir en producción y no Erlang.

Sinceramente, recomendaría Elixir. Esta es mi opinión y no necesariamente la adecuada para usted, pero a continuación enumeraré mis razones.

  1. Productividad: vengo de Ruby / Rails, por lo que la sintaxis y el estilo de Elixir es algo que me resulta muy familiar. Uno de los principales factores que me ayuda a determinar si aprender o no un idioma es cuán productivo puedo ser en él, principalmente por qué elegí Ruby. Elixir es el mismo. Puedo trabajar tan rápido como Ruby con todos los beneficios adicionales de la concurrencia y la coincidencia de patrones.
  2. Erlang: dado que Elixir está construido sobre Erlang y se compila en erlang y beam vm, usted tiene acceso a todos los módulos y paquetes de erlang. Entonces, si le preocupa usar elixir y perderse todas las funciones de Erlang, no debería estarlo. Elixir incluso tiene sus propias implementaciones de la mayoría de las funciones más grandes de Erlang / OTP, como GenServer, GenEvent, etc.
  3. Comunidad / Recursos: La comunidad de Elixir es realmente excelente. El canal slack es muy popular y es una excelente manera de obtener algunas respuestas para preguntas de principiantes. Ya hay algunos libros realmente buenos escritos sobre el lenguaje (Programming Elixir 1.2 - Dave Thomas, autor de Ruby Pickaxe) que también facilitan el aprendizaje del lenguaje.

Realmente, si tienes problemas con los dos, probablemente llegarás a la misma decisión de que Elixir es un lenguaje mucho más agradable con todas las características de Erlang + More. También está aumentando, no puedo recordar los números exactos, pero recuerdo haber leído algo del sitio web Hex (administrador de paquetes) sobre un aumento considerable en las descargas de paquetes.

Harrison Lucas
fuente
14
Elixir no se compila en Erlang, se compila en código BEAM. Elixir NO es similar a coffeescript, et. Alabama. que solo escribe JS.
Peter R
64

No debe tropezar con nada que pueda hacer en uno que no pueda hacer en el otro, ya que puede llamar libremente al código Elixir desde Erlang y viceversa. Incluso puede mezclar fácilmente archivos Erlang y Elixir en un proyecto.

En Elixir:

:erlang_module.erlang_function(args)

en Erlang:

'Elixir.ElixirModule':elixir_function(args)
Paweł Obrok
fuente
2
A veces puede ser un poco complicado crear versiones con dependencias anidadas u otros casos muy específicos, pero creo que definitivamente esta es la respuesta correcta. NOTA : si se ejecuta en máquinas con recursos muy limitados, agregar dependencias Elixir y Elixir a una versión podría ser más pesado en términos de memoria. Entonces, si no me equivoco, a veces puede suceder que apegarse a Erlang puro podría tener el beneficio de ahorrar algunos Megabytes de memoria, lo que facilita evitar fallas cuando no queda espacio para expandir la VM.
Laymer
37

TL; DR - Comience con Elixir

Erlang tiene una curva de aprendizaje más pronunciada en comparación con Elixir. Una vez que comiences a aprender Elixir, automáticamente comenzarás a aprender Erlang. Por lo tanto, comience con Elixir. Elixir está escrito en Erlang y Elixir. Vea la distribución en Github (ya que Elixir está lleno de macros, también conocido como metaprogramación). Distribución del código del proyecto Elixir

Puede usar Elixir con Erlang y viceversa, de ahí el ecosistema completo de Erlang de más de 20 años de bibliotecas.

Más detalles de Erlang Solutions

La productividad 'lista para usar' de Elixir se logra mediante un fuerte enfoque en las herramientas y la conveniencia en la expresión de la manipulación de datos. El diseño del sistema es el mismo en Elixir y Erlang, pero Elixir elimina una gran cantidad de código estándar y es más fácil de extender. La eliminación del texto estándar aumenta la productividad y permite a los programadores obtener comentarios más rápidamente, algo crucial cuando desea lanzar su producto al mercado lo más rápido posible. Menos repetición también hace felices a los desarrolladores, y los desarrolladores felices son desarrolladores sorprendentemente productivos.

Publicación del blog de Joe Armstrong (inventor de Erlang) sobre Elixir

Empiece aquí para aprender sobre Elixir - Introducción

Una vez que sienta que va bien, trabaje para practicar el Ejercicio y otros recursos .

Sairam
fuente
3

Hay algunas cosas. Creo que no se puede hacer una función anon recursiva en Elixir. Ahora, para ser justos, esto es algo que en más de 8 años de Erlang no creo que haya necesitado hacer nunca, y si lo hiciera, podría hacerse fácilmente de alguna otra manera. Probablemente hay algunas otras cosas como esa que, honestamente, puede ignorar.

En general, para las cosas que a la mayoría de la gente le importa cualquier cosa que puedas hacer en Erlang, puedes hacer en Elixir y viceversa. La comunidad del lado de Elixir parece ser más activa, por lo que sugeriría comenzar allí. Recientemente me mudé de Erlang a Elixir y, con la excepción de algunas cosas elegantes en Proper, puedo decir que es una transición bastante fácil

Zachary K
fuente