viernes, 3 de febrero de 2012

Erlang


Hoy voy a escribir sobre lo que me ha mantenido ocupado en mis pocos ratos libres estos últimos meses, Erlang!

Hace tiempo que quería aprender algo nuevo, lógicamente que me fuera útil y que estuviera relacionado con los sistemas distribuidos y la escalabilidad, faltaría más. Así que me puse a buscar y di con 3 buenas opciones:

  • node.js
  • scala
  • erlang

Me gustó mucho node.js, pero debo admitir que el hecho de que sea javascript me hechó un poco para atrás (aclaración: no tengo NADA en contra de javascript, pero no es exactamente lo que estaba buscando). Así que estaba entre scala i erlang.

Erlang vs Scala

Por un lado tenemos un lenguaje de programación que corre en la máquina virtual de Java, actual, con toques funcionales y bastante hype, aunque no falto de críticas. Por el otro lado un lenguaje mucho más "underground", totalmente funcional y bastante más viejo. Los dos se adaptan bien a lo que quería, y además, los dos tienen un modelo de concurrencia basado en "actores".

Debo admitir que ya iba un poco predeterminado a escoger Erlang, aunque por temas de trabajo también me interesaba aprender un poco de Scala. Finalmente, tras unas pequeñas investigaciones y una pequeña incursión en Scala llegué a la conclusión de que el lenguaje es (para mi gusto) excesivamente complicado, no para aprender, sino ya para utilizar efectivamente, lo que en inglés llaman "overenginered". Lógicamente es una opinión personal.

Así que nada, eché una ojeada a Erlang (http://www.learnyousomeerlang.com) y finalmente me decidí a comprar el libro de o'reilly.

Erlang
Erlang es un lenguaje puramente funcional, con una sintaxis un poco barroca, que corre sobre una máquina virtual. Fue creado hace bastante tiempo (en términos informáticos) en Ericsson y fue abierto al público en 1998. No quiero ni describir el lenguaje ni hacer un mini tutorial, para esto tenéis la página que he puesto antes y la descripción en wikipedia.

Y qué pinta Erlang hoy en día ? pues básicamente su modelo de concurrencia, como he dicho antes, basado en actores, o lo que es lo mismo, un modelo de concurrencia sin variables compartidas, mediante envío de mensajes, asíncrono.

Pero hay alguien que utilice Erlang?
Pues si señores, seguro que os suenan estos proyectos (entre muchos otros):


Temas que hacen que erlang sea la caña:
Como ya he dicho no quiero entrar en detalle del funcionamiento de Erlang, ni de la sintaxis ni de las características del lenguaje, pero hay unos temas que me creo hay que destacar:

  • Asíncrono con envío de mensajes: Las comunicaciones entre procesos se hacen a base de enviar mensajes. Los procesos van realizando sus tareas y de vez en cuando miran su "mailbox", si hay algun mensaje, se lee y se hace lo que se tiene que hacer y se contesta. 
  • Hot code swapping: Uno de las características más espectaculares. Podemos hacer un update de código sin tener que reiniciarlo. No es eso el sueño de todo programador de backend?
  • Programación distribuida integrada: Igual que las comunicaciones entre procesos, pero en procesos en máquinas distintas, todo integrado en el 'core' del lenguaje, sin ningún tipo de librería externa.
  • Película: si señores, Erlang tiene una película.

Además, hay algunos links dignos de mención:



Del tutorial a producción

El hecho de que sea un lenguaje muy distinto de los que estoy acostumbrado a trabajar hace que sea un poco difícil de dominar, ya se sabe, para aprender hay que poner horas y experiencia, en términos informáticos: poner en producción. Intenté convencer a unos compañeros de un proyecto para utilizar Erlang, su respuesta fue que como vieran una sola linea de Erlang en el sistema me iban a colgar de lo más alto de un edificio muy conocido, así que de momento me estoy reservando a algún proyecto personal que ya tengo pensado y muy pronto (crucemos los dedos) empezaré.

1 comentario:

  1. Hey, me ha gustado Marc :-)

    Un software fundamental de toda la vida que es necesario nombrar es ejabberd, el servidor XMPP por excelencia.

    Yo daba por hecho que tanto Facebook como Whatsapp usan ejabberd. Apuesto que cuando Whatsapp dice "usamos FreeBSD + Erlang" significa que tienen montado un ejarbberd sobre FreeBSD :-P

    ResponderEliminar

Comenta: