featured image

En 2009 comencé en el mundo de Erlang, en 2012 publiqué el primer libro sobre Erlang y ahora, 12 años después de aquél primer momento publico la tercera edición, sobre OTP 24, ¿Quieres saber qué hay de nuevo en OTP 24 y la 3ª edición del libro?

OTP 24 fue lanzado con grandes expectativas, además de muchas características atractivas como los aliases de procesos también dispone de una nueva característica del compilador llamada JIT (Just-In-Time) de la que se lleva hablando mucho tiempo y tuvo su presentación en sociedad en la Code BEAM V STO en 2020.

En el blog de Ericsson se puede encontrar un artículo donde se especifican los detalles a resaltar de esta nueva versión. Si tenemos presente que la segunda edición del libro de Erlang/OTP Volumen I fue lanzada en mayo de 2016 cubriendo hasta la versión 18, debemos tener presente las muchas mejores aparecidas desde esa versión hasta la 24. Veremos primero un resumen de las mejoras expuestas por Lukas Larsson de OTP 24, después veremos qué nos ofrece la tercera edición del libro.

BeamAsm - compilador JIT para Erlang

Sí, como veníamos diciendo una de las grandes mejoras de OTP 24 es el compilador JIT. Ganamos en rendimiento y esto no era común en Erlang. Una de las debilidades de Erlang fue siempre su rendimiento en comparación con otros lenguajes imperativos. Ahora, gracias al uso de JIT, muchos de los algoritmos ya tienen un mejor rendimiento y no es necesario recurrir a NIFs (Native Implemented Function o Función Implementada Nativa) para escribir código en lenguajes como C, Nim, Zig o Rust e integrarlo en Erlang.

Según datos de la presentación realizada por Larsson vemos incrementos en rendimiento de hasta 150% en transformaciones de JSON y empleando RabbitMQ, un 50% más de mensajes procesados.

Mejoras en los Mensajes de Error

Todos los lenguajes, sobre todo Rust, tienen mensajes muy específicos y completos que ayudan al desarrollador a encontrar los fallos y corregirlos.

Cuando la primera edición del libro vio la luz Erlang estaba en su versión R15 e incluía información sobre el número de línea donde se producía el fallo.

Más recientemente se incluyó también el número de columna para poder ser empleado por IDEs y la última mejora no solo incluye más información de dónde se encuentra el fallo sino que además muestra las líneas de código donde se encuentra el error y aún más detalle sobre porqué pudo haberse producido ese error.

Hemos pasado de ver en consola un {error, badarg} a ver actualmente algo mucho más completo como esto:

1> 1 + a.
** exception error: an error occurred when evaluating an arithmetic expression
     in operator  +/2
        called as 1 + a

En el capítulo hablando sobre el lenguaje y errores mencionamos los errores más comunes y la forma en la que se presentan. Esta sección ha sufrido cambios en cada edición gracias a las grandes mejoras del lenguaje.

Aliases de procesos

Una de las mejoras de OTP 24 es el empleo de los aliases de procesos. En el libro explico los casos de uso más comunes, pero el más significativo es cuando se produce un tiempo de espera agotado al solicitar información a un proceso y debemos seguir con el proceso. Quien debe enviar el mensaje de vuelta no sabe que ya no estamos esperando para obtener la respuesta y la envía igualmente.

Para evitar este escenario, en lugar de envías nuestro PID de proceso enviamos un alias. De esta forma, cuando se produce el tiempo de espera agotado eliminamos el alias y evitamos que la respuesta nos alcance.

Documentación

En el apéndice dedicado a la consola hablo ahora también sobre la ayuda. Esta característica viene potenciada desde Elixir y se ha visto mejorada de forma significativa al incluir no solo información de ayuda sino también hacer compatible el formato de EDoc para obtener la ayuda en línea.

Soporte de socket en gen_tcp

Otra de las mejoras realizadas en OTP 24 es socket y su integración con gen_tcp. Hasta el momento lo más bajo que podíamos ir para utilizar la capa de red era gen_tcp y disponía unas funciones muy limitadas si nuestras necesidades iban un poco más allá de una conexión básica TCP. Ahora con socket podemos tener el control total de la conexión. Hablamos de cómo utilizar socket en el capítulo de comunicaciones.

crypto

En las últimas versiones de OTP siempre se han producido cambios en crypto, ya sea en los algoritmos a implementar porque se han detectado vulnerabilidades en algunos o ya sea por el cambio realizado en la arquitectura propia de la librería. Considero oportuno incluir a esta aplicación y sus usos como ssl para comunicaciones en esta edición del libro.

Más en el libro...

Queda comentar el cambio de rebar a rebar3 en el capítulo de ecosistema, donde construimos un proyecto empleando ahora rebar3 y hex.

El capítulo de ETS, DETS y Ficheros ha sido separado en dos capítulos diferentes, uno dedicado a la memoria donde se ha incluido atomics, counters y persistent_term para completar junto a ETS. DETS, Ficheros y Directorios conforman el otro capítulo dedicado al almacenamiento en disco.

Además, algunas mejoras en la sección de datos binarios, la programación funcional, el uso de mapas y gestión de errores.

Espero que disfrutes la lectura apoyando el proyecto de Altenwald Books adquiriendo el libro, aprendiendo y dejando una reseña sobre qué te parece el libro para ayudar al crecimiento del proyecto. Gracias.