Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INTRODUCCION
AL INICIO
Erlang y Elixir son dos lenguajes de programacion diseñados para abordar la concurrencia en
sistemas. Erlang, se usa para aplicaciones cirticas y tolerantes a fallos, por el otro lado Elixir,
ofrece una sintaxis mas moderna y amigable.
Erlang
Es un lenguaje funcional con proposito general que esta orientado para construir sistemas
escalables, que sean tolerantes a fallos y concurrentes
Y es muy ampliamente conocido por tener la capacidad de crear aplicaciones que pueden
manejar eficientemente una gran cantidad de tareas concurrentes y mantener su estabilidad
incluso en circunstancias desfavorables. Su enfoque en la concurrencia y la tolerancia a fallos es
parte integral del diseño de Erlang por lo tanto lo hace adecuado para aplicaciones como
sistemas de telecomunicaciones, servidores web y sistemas distribuidos en la tolerancia a fallos
Erlang fue diseñado con un objetivo especifico en mente: aportar una mejor formade
programar aplicaciones de telefonía.
SINTAXIS
EJEMPLO 1
Exporta la función start/0, lo que significa que puede ser llamada desde fuera del módulo.
La función say_hello/1:
En resumen, el programa imprimirá el mensaje "Hello, World" cinco veces, una vez por cada
llamada recursiva de la función say_hello/1, reduciendo el valor del argumento en 1 en cada
llamada, hasta que el argumento llegue a 0.
EJEMPLO 2
Envía mensajes a cada impresora (P1, P2 y P3) para que impriman (P1 ! print, etc.).
Utiliza la construcción receive para esperar un mensaje de confirmación de que una impresora
ha completado la tarea de impresión.
Robustez: La disponibilidad en telecomunicaciones es crucial, por lo que los errores deben ser
controlados para no interrumpir otras partes del sistema. Idealmente, no debería haber
errores.
Distribución: El sistema debe ser distribuido en varias computadoras, ya sea por la naturaleza
inherente de la aplicación o para robustez y eficiencia.
HiPE Core Erlang Compiler: El tercer paso es donde entra en juego el compilador HiPE. En lugar
de generar código nativo directamente, el compilador HiPE toma el bytecode BEAM generado
por el compilador ERLANG/OTP en el primer paso y lo traduce a "Core Erlang". El "Core Erlang"
es una representación intermedia simplificada que todavía es independiente de la arquitectura
y más fácil de optimizar.
Luego, el proceso continúa más allá de la Figura 2, con etapas adicionales que involucran la
generación de código de máquina nativo a partir de "Core Erlang" utilizando optimizaciones y
transformaciones específicas de HiPE.
En resumen, el "HiPE Core Erlang Compiler" actúa como un enlace clave en el proceso de
compilación del compilador HiPE. Traduce el bytecode BEAM a "Core Erlang" y permite aplicar
optimizaciones específicas para mejorar el rendimiento y generar un código de máquina nativo
más eficiente. Esto puede resultar en un mejor rendimiento general del programa Erlang en
términos de velocidad de ejecución y uso de recursos.
VM
Desde los primeros días de Erlang, han existido dos implementaciones de la Máquina Virtual
Erlang: la Máquina Abstracta de Joe (JAM) [8] y la Máquina Abstracta de Erlang de Bogdan/Bjrn
(BEAM). JAM fue la máquina virtual original de Erlang, inspirada en la Máquina Abstracta de
Warren (WAM) utilizada en Prolog.
JAM: JAM utilizó una máquina virtual basada en pila, similar a Java, donde los argumentos de
las funciones se pasan al empujarlos explícitamente en la pila y luego saltar a la primera
instrucción de la función. El propósito principal de JAM era iniciar el proceso de desarrollo de
Erlang.
BEAM: BEAM es la implementación actual de facto del sistema Erlang. BEAM fue inicialmente
un intento de compilar Erlang a través de C [9]. A diferencia de JAM, BEAM es una máquina
virtual de registro virtual, donde los registros de la máquina virtual se utilizan para llamadas a
funciones y paso de parámetros.