Go es un lenguaje divertido e imperativo y es ideal para proyectos de herramientas de línea de comandos. Es un lenguaje pequeño, bastante rápido, fácil de aprender, con concurrencia de estilo buzón. Como todo se compila en un binario ‘pequeño’ ajustado, es fácil de enviar (siempre y cuando se haya compilado para el arco / os en el que lo está enviando). Todavía tiene problemas, ya que es totalmente fácil compartir variables mutables entre las rutinas que pueden conducir a algunas cosas divertidas en las que probablemente terminará lanzando un mutex al acceder a esa variable, ya que es más fácil que volver a diseñar su programa para pasar el valor de eso. variable alrededor a través de canales.
Pero oh! usted dice, eso es simplemente una programación perezosa y totalmente reparable al no ser una estupidez. Y estarías en lo cierto. Sin embargo, ir tiene otros problemas para ejecutar cosas grandes y de larga duración, como si una gorutina sale terriblemente mal, probablemente llevará consigo todos los malditos procesos que Erlang / Elixir no hará.
De todos modos, como dije, Go es ideal para programas pequeños a medianos. Se utiliza mejor cuando desea una herramienta CLI que tome algunos argumentos, haga algunas cosas y luego deje de ejecutarse y haga todas esas cosas rápidamente . Con gorountines es muy fácil escribir código concurrente (pero no necesariamente seguro). No tiene el “costo de inicio” de un lenguaje basado en VM como Erlang / Elixir, por eso digo que es genial para cosas de CLI, cuando estamos comparando los dos. El BEAM (Erlang VM) definitivamente requiere una cantidad notable de tiempo para iniciarse, por lo que es mucho más adecuado para cosas de larga duración.
Lo que ahora me lleva al Elixir . Un poco de historia, en caso de que no lo sepas: Elixir se ejecuta en el BEAM, también conocido como la máquina virtual Erlang y comparte mucho en común con Erlang. Elixir parece rubí en la superficie, pero es muy diferente. Elixir es un lenguaje funcional y, por lo tanto, si no ha tratado con uno de esos antes, se encontrará con una curva de aprendizaje. Olvídate de OOP, olvida los bucles tradicionales (while / for), olvida las variables mutables. Olvida todas esas cosas. Escribes funciones, esas funciones hacen una pequeña unidad de trabajo y regresan. Sin embargo, definitivamente vale la pena aprender un lenguaje funcional (y no mejor que Elixir o Erlang). Erlang a menudo se acredita como el abuelo de la concurrencia de buzón / actor / estilo erlang (que es donde Go obtuvo su modelo de concurrencia). Sin embargo, también vale la pena señalar algo más al respecto, algo más que Go no tiene, y eso es tolerancia a fallas . Arriba dije que si una gorutina tiene forma de pera, lleva todo el proceso. Ese tipo de mierda simplemente no volaría en el campo de las telecomunicaciones en el que se desarrolló Erlang. Si un proceso Erlang (no un proceso del sistema operativo, un proceso Erlang) muere, muere. Todos los demás procesos en el sistema están bien y Erlang tiene facilidades para que los procesos monitoreen otros procesos y se vuelvan a poner en marcha si uno muere. Es jodidamente increíble. Absolutamente hermoso.
- Si comencé a fumar marihuana a los 12 años y no dejé de fumar hasta los 18, ¿qué tan jodido está mi cerebro?
- ¿Por qué tengo moretones al azar?
- ¿Qué es un buen mensaje de canción?
- ¿Por qué sigo viendo el mismo número?
- ¿Dónde y cómo empiezo a hacer ritmos rip / hip-hop?
De todos modos, Elixir es ideal para cosas de larga duración, como cosas web de back-end. Su simultaneidad (y la capacidad de utilizar completamente múltiples procesadores de forma casi automática) y la tolerancia a fallas lo hacen increíble para aplicaciones web de larga duración. Con Phoenix, no es demasiado difícil poner en funcionamiento una aplicación web. También es una opción perfecta para cualquier tipo de servicio [micro] que necesite ejecutarse durante un tiempo y que esté activo todo el tiempo.
Si eliges seguir adelante con Elixir, te recomiendo encarecidamente Elixir de programación de Dave Thomas. Tampoco sería una mala idea tener un poco de Erlang en tu haber, ya que es posible que tengas que tocarlo a veces, que hay dos grandes libros para eso: Fred Hebert’s Learn You Some Erlang (que puedes comprar como árbol muerto) o leer en línea) y Programming Erlang de Joe Armstrong (él es el inventor del lenguaje).
TL; DR: Creo que Go es excelente para cosas de CLI de corta duración y Elixir / Erlang es excelente para servicios de larga duración que necesitan mantenerse activos y ser rápidos.