Este artigo (ou sección) está desactualizado(a). A información fornecida mudou ou é insuficiente.
Este artigo ou sección precisa dunha revisión do formato que siga o libro de estilo da Galipedia. Pode axudar a mellorar este artigo e outros en condicións semellantes.
Este artigo contén varias ligazóns externas e/ou bibliografía ao fin da páxina, mais poucas ou ningunha referencia no corpo do texto.Por favor, mellora o artigo introducindo notas ao pé, citando as fontes. Podes ver exemplos de como se fai nestes artigos.
Erlang
Paradigmamultiparadigma, funcional, reflexiva, concorrente
Data1986
DeseñadorEricsson (Telefonaktiebolaget L. M. Ericsson)
Última versión19.1
Tipo de datoforte, dinámico
Influído porProlog, Smalltalk, PLEX, LISP
InfluíuF#, Clojure, Rust, Scala, Opa, Reia, Elixir, Dart, Akka
LicenzaLicenza Apache 2.0 (desde o lanzamento 18.0)

A linguaxe Erlang é unha linguaxe de programación concorrente e un sistema de execución que inclúe unha máquina virtual e librerías.

O subconxunto de programación secuencial de Erlang é un linguaxe funcional, con avaliación estrita, asignación única, e tipado dinámico. Foi deseñado na compañía Ericsson para realizar aplicacións distribuídas, tolerantes a fallos, soft-real-ware e de funcionamento ininterrompido. Proporciona o cambio en quente de código de forma que este pódese cambiar sen parar o sistema. Orixinalmente, Erlang, era unha linguaxe propietaria de Ericsson, pero foi cedido como open source en 1998.

A introdución de Ericsson é, principalmente interpretada pero tamén inclúe un compilador HiPE (só soportado nalgunhas plataformas). A creación e xestión de procesos é trivial en Erlang, mentres que, en moitas linguaxes, os fíos considéranse un apartado complicado e propenso a erros. En Erlang toda concorrencia é explícita.

Erlang recibe o nome de A. K. Erlang. Ás veces pénsase que o nome é unha abreviación de ERicsson LANGuage, debido ao seu uso intensivo en Ericsson. Segundo Bjarne Däcker quen foi o xefe do Computer Science Lab no seu día, esta dualidade é intencional.

Historia

[editar | editar a fonte]
Por favor, axuda na mellora deste artigo ou sección ampliando a información que achega.Se cadra, podes atopar máis información na páxina de conversa.

Linguaxe funcional

[editar | editar a fonte]

O código fonte ten este aspecto:

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

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

A continuación unha introdución do algoritmo Quicksort.

%% quicksort:qsort(List)
%% Ordena unha lista de elementos
-module(quicksort).
-export([qsort/1]).

qsort([]) -> [];
qsort([Pivot|Rest]) ->
    qsort([ X || X <- Rest, X < Pivot]) ++ [Pivot] ++ qsort([ E || E <- Rest, E >= Pivot]).

O exemplo anterior chama recursivamente á función qsort ata que non hai nada máis para ordenar. A expresión [ X || X <- Rest, X < Pivot] pódese interpretar como: "Elixe todo X onde X é membro de Rest e X é menor que Pivot", resultando nun forma moi sinxela de manipular listas. Como se pode avaliar calquera expresión boleana entre dous tipos de datos diferentes, a avaliación é sinxela: por exemplo, 1 </code<> devolverá true.

Con todo, unha función de comparación pódese usar se é necesario cambiar a orde en que Erlang basea o seu valor de retorno (true or false) Por exemplo, se quixeramos unha lista ordenada onde a 1 fose avaliado como true.

O seguinte código ordenaría un lista en función da lonxitude:

-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([ E || E <- Rest, not(Smaller(E, Pivot))], Smaller).

Linguaxe orientada a concorrencia e distribución

[editar | editar a fonte]

A maior fortaleza de Erlang é o soporte para concorrencia. Ten un pequeno pero potente conxunto de primitivas para crear procesos e comunicar entre os mesmos. O modelo de procesos baséase en C.A.R. Hoare's Communicating Sequential Processes. Devanditos procesos son a forma principal de estruturar unha aplicación, e pódese crear un gran número deles sen que se degrade o rendemento (chegouse a facer unha proba con 20 millóns de procesos).

O soporte para procesos distribuídos é tamén parte de Erlang. Os procesos pódense crear en nodos remotos, e a comunicación con eles é transparente. É dicir, a comunicación con procesos remotos faise exactamente da mesma xeito que a comunicación con procesos locais.

Exemplos:

 Pid = spawn(Mod, Func, Args)       % executar a función Func como un novo proceso
 Pid = spawn(Node, Mod, Func, Args) % executar a función Func nun nodo remoto

 Pid ! a_message      % enviar unha mensaxe ao proceso (asíncronamente)

 receive       % recibir a mensaxe enviada a este proceso
   a_message -> do_something
 end.

A principal forma de control de erros en Erlang tamén se basea na concorrencia. Cando un proceso cólgase, termina limpamente e envía unha mensaxe ao proceso controlador quen pode actuar en consecuencia. Esta forma de control de erros pode incrementar a mantenibilidad e reducir a complexidade do código.

Distribución

[editar | editar a fonte]

Erlang foi feito público por Ericsson como código aberto para asegurar a súa independencia dun único vendedor e para dalo a coñecer dunha forma máis ampla. A distribución da linguaxe xunto coas librerías e a base de datos de tempo real (Mnesia) denomínanse Open Telecom Platform (Plataforma aberta de Telecom), ou OTP. Ericsson e outras poucas empresas ofrecen soporte comercial para Erlang.

Desde que se colleu o camiño do código aberto en 1998, Erlang empezou a ser utilizado por varias compañías en todo o mundo, incluíndo Nortel e T-Mobile. De todos os xeitos, Erlang aínda non é unha linguaxe de programación moi estendido.

Na data actual (2006), existe un desenvolvemento activo de Erlang con edicións regulares. Está dispoñible para diversos sistemas operativos de tipo Unix e Microsoft Windows.

Véxase tamén

[editar | editar a fonte]

Ligazóns externas

[editar | editar a fonte]