Erlang

Erlang
Para otros usos de este término, véase Erlang (desambiguación).

Erlang es un lenguaje de programación concurrente y un sistema de ejecución que incluye una máquina virtual y bibliotecas.

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 y gestión de procesos es trivial 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 quién fue el jefe del Computer Science Lab en su día, esta dualidad es intencional.

Contenido

Lenguaje funcional

El código fuente tiene este aspecto:

-module(fact).
-export([fac/1]).

fac(0) -> 1;
fac(N) when N > 0 -> N * fac(N-1).

A continuación una 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] 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. Como se puede evaluar cualquier expresión boleana entre dos tipos de datos diferentes, la evaluación es sencilla: por ejemplo, 1 < a devolverá true.

Sin embargo, una función de comparación se puede usar si es necesario cambiar el orden en que Erlang basa su valor de retorno (true or false) Por ejemplo, si quiseramos una lista ordenada dónde a < 1 fuese evaluado como true.

El siguiente código ordenaría un lista en función de la 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 concurrencia. Tiene un pequeño pero potente conjunto de primitivas para crear procesos y comunicar entre los mismos. El modelo de procesos se basa en el modelo Communicating Sequential Processes 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 procesos distribuidos es también parte de Erlang. Los procesos se pueden crear en nodos remotos, y la comunicación con ellos es transparente. Es decir, la comunicación con procesos remotos se hace exactamente de la misma manera que la comunicación con procesos locales.

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 público 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 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.

Enlaces externos

Proyecto principal

Otros enlaces


Wikimedia foundation. 2010.

Игры ⚽ Поможем написать реферат

Mira otros diccionarios:

  • Erlang C — ist ein synonymer Ausdruck für ein Warteschlangenmodell, das vom dänischen Mathematiker Agner Krarup Erlang am Anfang des 20. Jahrhunderts entwickelt wurde, um die Wahrscheinlichkeit und die mittlere Dauer von Wartezeiten bei der… …   Deutsch Wikipedia

  • Erlang c — ist ein synonymer Ausdruck für ein Warteschlangenmodell, das vom dänischen Mathematiker Agner Krarup Erlang am Anfang des 20. Jahrhunderts entwickelt wurde, um die Wahrscheinlichkeit und die mittlere Dauer von Wartezeiten bei der… …   Deutsch Wikipedia

  • Erlang — bezeichnet: Agner Krarup Erlang (1878–1929), dänischer Mathematiker und Ingenieur eine Pseudomaßeinheit für die Verkehrsbelastung von Netzwerkleitungen, siehe Erlang (Einheit) ein Warteschlangenmodell, siehe Erlang C bzw. Erlang B eine… …   Deutsch Wikipedia

  • Erlang-B — (sometimes also written without the hyphen Erlang B) is a formula derived from the Erlang distribution to describe the probability of call loss on a group of circuits (in a circuit switched network, or equivalent). It is, for example, used in… …   Wikipedia

  • Erlang B — ist eine Formel, die sich von der Erlang Verteilung herleitet. Mit ihrer Hilfe kann man die Kapazitäten einer Telefonleitung ermitteln, die durchschnittlich für eine angenommene Anzahl an Gesprächen bei einer festgelegten… …   Deutsch Wikipedia

  • Erlang — may refer to: * Agner Krarup Erlang, a mathematician and engineer after whom several concepts are named ** Erlang unit, a unit to measure traffic in telecommunications or other domains ** Erlang distribution, a probability distribution describing …   Wikipedia

  • erlang — [ɛʀlɑ̃g] n. m. ÉTYM. 1973, Science et Vie, in la Clé des mots; nom d un savant danois. ❖ ♦ Techn. Unité servant à mesurer l intensité moyenne du trafic téléphonique …   Encyclopédie Universelle

  • Erlang — У этого термина существуют и другие значения, см. Эрланг (значения). Erlang Семантика …   Википедия

  • Erlang — 1 Original name in latin Erlang Name in other language Erlang, Erlangmiao, er lang State code CN Continent/City Asia/Chongqing longitude 33.83946 latitude 105.58832 altitude 1372 Population 0 Date 2012 01 18 2 Original name in latin Erlang Name… …   Cities with a population over 1000 database

  • erlang — (E)    a measure of telecommunications traffic density. The erlang is a dimensionless unit representing a traffic density of one call second per second (or one call hour per hour, etc.). The erlang is sometimes divided into 36 unit calls or 30… …   Dictionary of units of measurement

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”