- Erlang destaca por su robustez, concurrencia y tolerancia a fallos.
- Es fundamental en sectores críticos como telecomunicaciones y mensajería.
- Su modelo funcional facilita la escalabilidad y la actualización sin parar el sistema.

Erlang es uno de esos lenguajes de programación que, aunque no suena tanto como otros en la industria, ha sido fundamental para el desarrollo de sistemas distribuidos, escalables y, sobre todo, verdaderamente robustos desde sus inicios en los años 80. Hoy en día, su relevancia se mantiene, especialmente en áreas donde la tolerancia a fallos y la alta disponibilidad no son un capricho, sino una necesidad real. A pesar de que muchos desarrolladores quizá asocien Erlang principalmente con las telecomunicaciones, lo cierto es que su huella abarca desde bancos y sistemas financieros hasta mensajería instantánea y videojuegos en línea. En las próximas líneas vas a descubrir por qué este lenguaje ha marcado la diferencia en sectores donde el fallo no es una opción y cómo sus conceptos únicos de concurrencia y distribución pueden hacerte replantear la forma en la que construyes software.
No te dejes engañar por su estética retro o su relativa ausencia en las universidades: Erlang es tan actual y avanzado que muchos paradigmas modernos han bebido de su filosofía, lo que ha inspirado lenguajes recientes como Elixir. Si alguna vez te has preguntado cómo funcionan los sistemas que nunca pueden parar, o cómo es posible actualizar el código de una aplicación crítica sin interrumpir su servicio, sigue leyendo porque en este artículo encontrarás las respuestas a esas y otras muchas preguntas, siempre desde un punto de vista práctico, cercano y exhaustivo.
Índice
- 1 Historia y origen del lenguaje Erlang
- 2 Características clave de Erlang
- 3 Cómo funciona la concurrencia y el modelo de procesos en Erlang
- 4 Gestión de errores y tolerancia al fallo
- 5 Actualización en caliente (‘Hot Code Swapping’)
- 6 Distribución de procesos y escalabilidad nativa
- 7 OTP: Open Telecom Platform
- 8 Ventajas y desventajas de Erlang
- 9 Casos de uso reales y principales proyectos en Erlang
- 10 Ejemplos prácticos, sintaxis y paradigmas en Erlang
- 11 El ecosistema Erlang y herramientas asociadas
- 12 Instalación y compatibilidad
- 13 ¿Para quién es Erlang y cuándo conviene usarlo?
Historia y origen del lenguaje Erlang
Erlang fue creado en 1986 en los laboratorios de Ericsson por un equipo liderado por Joe Armstrong, Robert Virding y Mike Williams. En ese momento, la industria de las telecomunicaciones se enfrentaba al enorme reto de garantizar que los sistemas telefónicos funcionasen con una disponibilidad casi absoluta, aceptar fallos eficientes y permitir actualizaciones sin cortes de servicio. Estos requisitos impulsaron a Ericsson a buscar un nuevo paradigma de programación, más adecuado que los lenguajes existentes.
El nombre ‘Erlang’ es un homenaje a Agner Krarup Erlang, matemático e ingeniero danés especializado en el estudio del tráfico telefónico y los modelos de colas. Su apellido también da nombre a la unidad Erlang, fundamental para la ingeniería de tráfico en telecomunicaciones y cálculo del grado de servicio.
El resultado fue un lenguaje de alto nivel basado en un paradigma funcional, concurrente y orientado a procesos independientes, que permitía gestionar fácilmente tareas simultáneas y ofrecía una increíble robustez frente a fallos. Según las palabras de Joe Armstrong, “si Java es ‘hazlo una vez y córrelo donde sea’, Erlang es entonces ‘hazlo una vez y córrelo para siempre’”.
Características clave de Erlang
- Concurrencia basada en procesos ligeros: Erlang permite crear y destruir procesos con un coste mínimo, manejando millones de ellos en paralelo sin degradación apreciable del rendimiento.
- Sin memoria compartida: Los procesos son totalmente independientes y se comunican únicamente a través del paso de mensajes asíncronos, evitando uno de los mayores problemas de la concurrencia: el acceso concurrente a recursos compartidos.
- Tolerancia a fallos y supervisión: Erlang está diseñado para que los procesos fallen de forma aislada. Un sistema de supervisores puede monitorizar los procesos y reiniciarlos automáticamente en caso de error, asegurando la continuidad del sistema.
- Distribución nativa: Se pueden desplegar procesos en diferentes nodos – tanto locales como remotos – y la comunicación entre ellos se realiza de forma transparente, como si estuvieran en el mismo nodo.
- ‘Hot code swapping’ o actualización en caliente: Erlang puede modificar el código de un sistema en ejecución sin necesidad de detener los servicios, lo que resulta crítico en entornos donde el tiempo de inactividad es inaceptable.
- Modelo funcional y tipado dinámico: Su diseño funcional promueve el uso de funciones puras e inmutabilidad, con variables que sólo pueden ser asignadas una vez. El tipado dinámico permite flexibilidad y agilidad a la hora de programar.
- Garbage collector eficiente: Cada proceso gestiona su propia memoria, evitando los pausas globales asociadas a los recolectores en otros lenguajes y permitiendo sistemas de respuesta rápida.
- Open Telecom Platform (OTP): Erlang viene acompañado de una plataforma repleta de librerías, herramientas y patrones de diseño orientados al desarrollo de sistemas distribuidos y tolerantes a fallos.
Cómo funciona la concurrencia y el modelo de procesos en Erlang
Erlang ha popularizado el llamado «modelo de actores», en el que todo es un proceso. Estos procesos son extremadamente livianos, gestionados por la máquina virtual BEAM y no por el sistema operativo, lo que permite crear millones de ellos sin problemas. Cada proceso tiene un buzón de mensajes (“mailbox”) y sólo interactúan entre sí mediante el envío de mensajes. No comparten memoria ni recursos, lo que facilita el diseño de sistemas robustos sin los típicos errores de sincronización (race conditions) o bloqueos (deadlocks).
Las operaciones para crear, enviar y recibir mensajes entre procesos son nativas en el lenguaje. Por ejemplo, para iniciar un nuevo proceso basta con la función spawn, y para comunicarse se utiliza una notación sencilla mediante el operador ! para enviar mensajes y el bloque receive...end para esperar y procesar los mensajes recibidos.
- La creación y destrucción de procesos apenas afecta al sistema.
- Los procesos pueden tener nombres únicos para facilitar la comunicación.
- El manejo de errores es global: los procesos que supervisan a otros pueden reiniciar los fallidos sin afectar el resto del sistema.
- Si un proceso conoce el nombre de otro, puede enviarle un mensaje, aunque esté en otro nodo remoto.
Gestión de errores y tolerancia al fallo
El enfoque de ‘deja que falle’ (‘let it crash’) es una de las grandes ideas de Erlang. Los procesos hacen aquello para lo que han sido diseñados, y si algo va mal, simplemente fallan sin intentar recuperarse. Son los procesos supervisores los que detectan estos errores y se encargan de restaurar el sistema automáticamente, ya sea reiniciando procesos, migrándolos a otro nodo o alternando estrategias según sea necesario.
Esto aumenta la resiliencia y mantenibilidad de grandes sistemas y reduce la complejidad general. Gracias a este modelo, muchas plataformas críticas basadas en Erlang han alcanzado tiempos de disponibilidad (uptime) espectaculares, logrando porcentajes del 99,999999% en sistemas de telecomunicaciones o mensajería.
Actualización en caliente (‘Hot Code Swapping’)
Una de las capacidades más potentes de Erlang es la actualización de código sin parar el sistema. Se puede cargar nuevo código mientras se mantiene el antiguo en funcionamiento, gestionando la transición de manera progresiva y sin afectar la operatividad. Así, los servicios pueden actualizarse, parchearse o recibir nuevas funcionalidades sin tiempos muertos ni reinicios.
Este mecanismo resulta crucial en sectores como la banca, telecomunicaciones o mensajería, donde incluso unos segundos de inactividad pueden suponer pérdidas millonarias o graves problemas de servicio.
Distribución de procesos y escalabilidad nativa
Erlang permite distribuir procesos entre diferentes máquinas conectadas en red, de forma nativa y transparente. Los nodos Erlang pueden ejecutarse en distintas plataformas o sistemas operativos y distribuir la carga entre ellos, facilitando la escalabilidad tanto vertical como horizontal. Comunicar procesos en nodos remotos es igual de sencillo que hacerlo en local.
Esto se traduce en facilidad para desarrollar aplicaciones que deben operar a gran escala (masivamente paralelas o con miles de usuarios concurrentes) y que pueden crecer fácilmente con la demanda. Ejemplos emblemáticos como RabbitMQ, CouchDB o ejabberd sacan partido de esta característica de Erlang.
OTP: Open Telecom Platform
OTP es un conjunto de librerías, marcos de trabajo y buenas prácticas que viene de serie con Erlang. Su objetivo es ayudar a los desarrolladores a construir, desplegar y mantener sistemas concurrentes, distribuidos y tolerantes a fallos más eficientemente. Entre sus componentes destacan:
- Aplicaciones listas para usar, incluyendo servidores web, gestor de base de datos en tiempo real (Mnesia), herramientas para depuración y módulos para desarrollo de sistemas de mensajería y procesamiento paralelo.
- Una arquitectura basada en árboles de supervisión y estrategias de recuperación automática.
- Procedimientos estándar para actualización en caliente y gestión de versiones de código.
Ventajas y desventajas de Erlang
Ventajas
- Alta escalabilidad: Gracias a su modelo eficiente, permite manejar millones de procesos concurrentes, ideal para sistemas en tiempo real o con grandes volúmenes de usuarios.
- Robustez y tolerancia a fallos: El sistema supervisor garantiza resiliencia ante errores, evitando que fallos locales afecten la disponibilidad global.
- Actualización sin tiempo de inactividad: El hot code swapping permite aplicar cambios sin interrumpir el servicio, esencial para entornos críticos.
- Distribución sencilla: La comunicación entre nodos distribuidos se gestiona de manera natural, simplificando la construcción de aplicaciones globales.
- Soporte y madurez: Usado durante décadas en sectores como telecomunicaciones, mensajería o banca.
Desventajas
- Curva de aprendizaje pronunciada: La programación funcional y el modelo de actores pueden ser complejos para quienes vienen de paradigmas orientados a objetos.
- Poca popularidad fuera de su nicho: No tan extendido como otros lenguajes, lo que complica encontrar recursos o programadores experimentados.
- Menos adecuado para tareas intensivas en CPU: Erlang brilla en sistemas concurrentes y distribuidos, pero no es óptimo para cálculos matemáticos complejos o procesamiento de imágenes.
- Ecosistema de bibliotecas más limitado: Dispone de muchas herramientas, pero no tantas como los lenguajes mainstream como Python, Java o JavaScript.
Casos de uso reales y principales proyectos en Erlang
Erlang ha sido adoptado e implementado sorpresivamente en industrias donde la concurrencia, la tolerancia a fallos y la disponibilidad continua son una prioridad absoluta. Algunos de los casos más conocidos son:
- ejabberd: Un servidor de mensajería instantánea XMPP altamente escalable.
- CouchDB: Base de datos documental NoSQL de tipo distribuido y tolerante a fallos.
- RabbitMQ: Plataforma de mensajería por colas (message broker) utilizada globalmente.
- Wings 3D: Herramienta avanzada de modelado 3D.
- WhatsApp: Emplea Erlang en su backend para manejar millones de conexiones activas simultáneas.
- Plataformas bancarias, bolsas de valores y trading financiero requieren sistemas ininterrumpibles, donde Erlang brilla especialmente.
En cuanto a aplicaciones desarrolladas sobre la plataforma, Mnesia (sistema gestor de base de datos distribuida en tiempo real) es fundamental para aplicaciones donde la consistencia y la inmediatez son críticas.
Ejemplos prácticos, sintaxis y paradigmas en Erlang
La sintaxis de Erlang es sencilla y directa, aunque puede resultar extraña al principio. El paradigma funcional promueve funciones puras y la inmutabilidad. Algunos ejemplos básicos incluyen:
- Procesos concurrentes:
-module(ejemplo_proceso). -export([start/0]). start() -> Pid = spawn(fun loop/0), Pid ! "¡Hola Mundo desde Erlang!". loop() -> receive Msg -> io:format("~p~n", [Msg]), loop() end. - Pattern Matching: Técnica fundamental para extraer valores de listas o tuplas según patrones concretos.
{_, _, Animal} = {perro, gato, vaca}. % Animal contendrá 'vaca' - Listas por comprensión:
[X * 2 || X <- [1,2,3,4]]. % Devuelve [2,4,6,8]
- Asignación única: Una vez que una variable recibe un valor, no puede reasignarse:
A = 5es válido,A = 6da error.
La estricta evaluación, la asignación única y el tipado dinámico son pilares que facilitan el razonamiento sobre el código, la ausencia de efectos colaterales y una mejor gestión de la concurrencia y la memoria.
El ecosistema Erlang y herramientas asociadas
Más allá del núcleo del lenguaje y OTP, Erlang dispone de un ecosistema productivo:
- BEAM: La máquina virtual BEAM ejecuta el código Erlang con extrema eficiencia y es utilizada también por otros lenguajes como Elixir.
- Elixir: Un lenguaje moderno que corre sobre BEAM, con una sintaxis más amable y funciones avanzadas.
- Rebar3: Herramienta estándar para gestionar dependencias y automatizar despliegues.
- Integración con otros lenguajes: Erlang puede enlazarse fácilmente con código en C y otros lenguajes para tareas críticas de eficiencia o compatibilidad.
Entre las opciones para desarrollar y depurar, destacan los plugins para IntelliJ IDEA y VS Code, además de entornos especializados para scripting y automatización.
Instalación y compatibilidad
Erlang es multiplataforma: puedes instalarlo en Windows, Linux, macOS o desde el código fuente. Existen instaladores oficiales y paquetes adaptados incluso para arquitecturas embebidas.
- Los entornos de desarrollo más populares incluyen plugins que facilitan la edición, depuración y despliegue, como Erlang LS para VS Code.
- El código puede ser probado y actualizado sin detener los procesos, ideal para entornos de desarrollo ágiles y sistemas productivos en funcionamiento.
¿Para quién es Erlang y cuándo conviene usarlo?
Erlang está pensado para quienes necesitan construir sistemas seguros, escalables, distribuidos y tolerantes a fallos. Aunque su aprendizaje requiere un cambio de mentalidad, los beneficios en entornos críticos (banca, telecom, mensajería, juegos en línea, comercio electrónico, Internet de las Cosas, etc.) son insuperables. Si buscas que tu software actúe siempre, incluso si parte del sistema falla, y deseas aprovechar la actualización en caliente sin tiempos muertos, Erlang es claramente la elección ganadora.
Para terminar, es clave entender que, aunque Erlang no copa titulares ni goza del número de usuarios de otros lenguajes, sigue siendo la columna vertebral de servicios que simplemente no pueden fallar. Con su enfoque en la concurrencia, la tolerancia a fallos y la facilidad para construir aplicaciones distribuidas a gran escala, sigue siendo un referente para las arquitecturas modernas y para otras plataformas que han nacido inspiradas en sus principios. Aprender Erlang abre la puerta a una forma distinta, más fluida y segura, de concebir el desarrollo de sistemas críticos.







