Erlang

Erlang es un lenguaje de programación concurrente (u
orientado a la concurrencia) y un sistema de ejecución que incluye una máquina
virtual (BEAM) y bibliotecas (OTP).4
El subconjunto de programación secuencial de Erlang es
un lenguaje funcional, con evaluación estricta, asignación única, y tipado
dinámico. Fue diseñado en la compañía Ericsson para realizar aplicaciones
distribuidas, tolerantes a fallos, soft-real-time y de funcionamiento
ininterrumpido. Proporciona el cambio en caliente de código de forma que éste
se puede cambiar sin parar el sistema. Originalmente, Erlang era un lenguaje propietario
de Ericsson, pero fue cedido como software de código abierto en 1998. La
implementación de Ericsson es principalmente interpretada, pero también incluye
un compilador HiPE (sólo soportado en algunas plataformas).
La creación, gestión y comunicación de procesos es
sencilla en Erlang, mientras que en muchos lenguajes, los hilos se consideran
un apartado complicado y propenso a errores. En Erlang toda concurrencia es
explícita.
Erlang recibe el nombre de A. K. Erlang. A veces se
piensa que el nombre es una abreviación de ERicsson LANGuage, debido a su uso
intensivo en Ericsson. Según Bjarne Däcker -quien fue el jefe del Computer
Science Lab en su día-, esta dualidad es intencional.
Ejemplos de programación funcional
Cálculo del factorial:
-module(fact).
-export([fac/1]).
fac(0) -> 1;
fac(N) '''when''' N > 0 -> N * fac(N-1).
A continuación se mostrará la implementación del
algoritmo Quicksort:
%% quicksort:qsort(List)
%% Ordena una lista de elementos
-module(quicksort).
-export([qsort/1]).
qsort ([]) -> [];
qsort([Pivot |Rest]) ->
qsort ([ X || X <- Rest, X < Pivot])
++ [Pivot] ++ qsort ([ Y || Y <- Rest, Y >= Pivot]).
El ejemplo anterior llama recursivamente a la función
qsort hasta que no hay nada más para ordenar. La expresión [ X || X <- Rest,
X < Pivot] es lo que se conoce como una lista por comprensión, y se puede
interpretar como: "Elige todo X dónde X es miembro de Rest y X es menor
que Pivot", resultando en un forma muy sencilla de manipular listas. ++ es
el operador de concatenación de listas.
Se puede utilizar una función de comparación para
definir formas más complejas de ordenar elementos.
El siguiente ejemplo ordenaría varias listas en
función de su longitud:
-module(listsort).
-export([by_length/1]).
by_length(Lists) ->
F = fun(A,B) when is_list(A), is_list(B)
->
length(A) < length(B)
end,
qsort(Lists, F).
qsort([], _) -> [];
qsort([Pivot|Rest], Smaller) ->
qsort([ X || X <- Rest, Smaller(X,
Pivot)], Smaller)
++ [Pivot] ++
qsort([ Y || Y <- Rest, not(Smaller(Y,
Pivot))], Smaller).
Lenguaje orientado a concurrencia y distribución
La mayor fortaleza de Erlang es el soporte para la
concurrencia. Tiene un pequeño pero potente conjunto de primitivas para crear
procesos y comunicarlos. El modelo de procesos se basa en el modelo
Comunicación de procesos secuenciales de C.A.R. Hoare. Dichos procesos son la forma
principal de estructurar una aplicación, y se puede crear un gran número de
ellos sin que se degrade el rendimiento (se ha llegado a hacer una prueba con
20 millones de procesos [1]).
El soporte para la programación distribuida es también
parte de Erlang: los procesos se pueden crear tanto localmente como en nodos
remotos, y la comunicación entre ellos se realiza de igual manera.
Ejemplos:
Pid =
spawn(Mod, Func, Args) %
ejecutar la función Func como un nuevo proceso
Pid =
spawn(Node, Mod, Func, Args) %
ejecutar la función Func en un nodo remoto
Pid !
a_message % enviar
un mensaje al proceso (asíncronamente)
receive % recibir el
mensaje enviado a este proceso
a_message -> do_something
end.
La principal forma de control de errores en Erlang
también se basa en la concurrencia. Cuando un proceso se cuelga, termina
limpiamente y envía un mensaje al proceso controlador quien puede actuar en
consecuencia. Esta forma de control de errores puede incrementar la
mantenibilidad y reducir la complejidad del código.
Distribución
Ericsson publicó Erlang con licencia abierta para
asegurar su independencia de un único vendedor y para darlo a conocer de una
forma más amplia. La distribución del lenguaje junto con las librerías y la
base de datos de tiempo real (Mnesia) se denominan Open Telecom Platform
(Plataforma abierta de Telecom), u OTP. Ericsson y otras empresas ofrecen
soporte comercial para Erlang.
Desde su liberación en 1998, Erlang empezó a ser
utilizado por varias compañías en todo el mundo, incluyendo Nortel y T-Mobile.
De todas formas, Erlang todavía no es un lenguaje de programación muy
extendido.
En la fecha actual (2010), Erlang continúa
desarrollándose regularmente. Está disponible para diversos sistemas operativos
de tipo Unix y Microsoft Windows.
Véase también
ejabberd, un servidor de mensajes instantáneos XMPP
(Jabber) escrito en Erlang.
Wings 3D, Herramienta de modelado 3D en Erlang.
Yet another web server (YAWS, un servidor de
aplicaciones web muy completo en Erlang).
Tsung, una herramienta de análisis de rendimiento muy
potente.
RabbitMQ, es un software de negociación de mensajes
mediante colas de código abierto escrito en Erlang.
Comentarios
Publicar un comentario