Erlang Programming Language
Aluísio Rodrigo (arfs)
Diego Lima (dclal)
Roteiro









Introdução
Histórico
Características
Utilização
Especificação
Implementação e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendências
Introdução
“Programming Erlang, Software for a Concurrent World”
Joe Armstrong, 2007
Introdução

Linguagem de programação
concorrente






Sistemas de telecomunicações
Sistemas de controle
Aplicações distribuídas
Soft Real-Time Applications
Open Source
Útil para Servidores de aplicação da
Internet
Roteiro









Introdução
Histórico
Características
Utilização
Especificação
Implementação e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendências
Histórico

Motivação: Nenhuma linguagem para sistemas de
telecomunicações

1984 – Formado Laboratório de Computação da
Ericsson

1987 – criação do protótipo da linguagem Erlang





1991 – Primeira Implementação rápida
1993 – Distributed Erlang


Homenagem ao matemático A.K. Erlang
Ericsson Language
Programação de sistemas de telecomunicações
Suporte à aplicações concorrentes e distribuídas
1998 – Open Source
Roteiro









Introdução
Histórico
Características
Utilização
Especificação
Implementação e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendências
Características

Linguagem Funcional



Funções matemáticas
Prova de propriedades
Concorrência


Baseada em processos
Concorrência é explícita


O usuário pode controlar quais segmentos
são computados seqüencialmente e quais
são feitos em paralelo
Processos só trocam informações
através de mensagens
Características

Tempo Real

Projetada para aplicações leves em
tempo real.


Respostas na ordem de milissegundos.
Programação Distribuída

Possui mecanismos que facilitam a
escrita de aplicações que possam rodar
tanto em um único computador como
em uma rede de computadores
Características

Robustez


Tolerância a falhas
Operação contínua


Gerenciamento de Memória



Primitivas de carregamento de código
Garbage Collector
Processos não compartilham memória
Integração

Pode ser integrado facilmente com
programas em outras linguagens
Roteiro









Introdução
Histórico
Características
Utilização
Especificação
Implementação e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendências
Utilização






Ericsson: AXD 301, GPRS,
(NetSim), LCS
Nortel: SSL Accelerator, SSL
VPN gateway + others
TMobile: IN applications
Vail Systems: Computer
Telephony Apps Service Prov.
Erlang Financial Systems:
Banking & Lottery systems
Mobile Arts: Presence &
Messaging for GSM/UMTS







Synap.se: Billing & device
configuration
Blue Position: Bluetooth
Location Information System
Motivity: Answer Supervision
Generator, Signalling Gateway
Telia: CTI Platform
Corelatus: Signalling gateways
& cross-connects
Bluetail/TeleNordia: Robust
SMTP Mail Server
Univ. of Coruña: VoD Cluster
Roteiro









Introdução
Histórico
Características
Utilização
Especificação
Implementação e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendências
Especificação

Open Source Erlang





www.erlang.org
Getting Started
Documentation
Examples
Downloads


Source
Binary
Roteiro









Introdução
Histórico
Características
Utilização
Especificação
Implementação e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendências
Implementação

Tipos de Implementação

Open Source Erlang
Implementação mais popular
 Inclui a biblioteca OTP (Open Telecom
Plataform)



Corba, Databases, GUI
Ericsson’s Comercial Erlang
Essencialmente a mesma da Open Source
 Oferece suporte

Implementação

Máquinas Virtuais

New BEAN (Bogdan/Björn's Erlang
Abstract Machine)


JAM (Joe’s Abstract Machine)


Utilizada na versão comercial
A máquina virtual original de Erlang
inspirada em Prolog
Old BEAN
Transformar de Erlang para C e depois
para código nativo
 Foi abandonado devido a problemas com
eficiência

Ambientes de Desenvolvimento

Erlang Shell


ErlyBird


Desenvolvido pela Ericsson
IDE baseado no NetBeans
Erlide


Plug-in para o Eclipse
Instalação:
http://www.cin.ufpe.br/~dclal/arquivos/instalacao.pdf
Roteiro









Introdução
Histórico
Características
Utilização
Especificação
Implementação e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendências
Sintaxe

Números

Integers





10.
-234.
2#110111010. (BASE#VALOR)
$A. ($CHAR)
Floats



17.368.
-56.654.
12.34E-10.
Sintaxe

Átomos



O valor do átomo é sua própria
declaração
O tamanho do átomo é indefinido
Deve possuir aspas caso não comece
com uma letra em minúsculo ou
contenha caracteres especiais que não
seja _ ( ) ou @




hello.
phone_number.
‘Monday’.
‘phone number’.
Sintaxe

Tuplas



{123, bcd}.
{person, 'Joe', 'Armstrong'}.
Listas


[123, 456].
[{person, 'Joe', 'Armstrong'}, {person,
'Robert', 'Virding'}].
Sintaxe

Variáveis



Devem começar com a primeira letra
maiúscula
Ao contrário dos átomos, só alguns
caracteres são permitidos
A variável só pode receber o valor
apenas uma vez



Abc
A_long_variable_name
AnObjectOrientatedVariableName
Sintaxe

Casamento de Padrão

{A, B, C} = {10, foo, bar}


[H|T] = [1,2,3,4]


A = 10, B = foo, C = bar
H = 1, T = [2,3,4]
{A,_,[B|_],{C}} = {abc,1,[2,3],{4}}

A = abc, B = 2, C = 4
Sintaxe

Boolean



Não existe o tipo booleano em Erlang.
São utilizados os átomos true e false.
String

São representações de listas de inteiros

“hello” = [$h,$e,$l,$l,$o] =
[104,101,108,108,111]
Sintaxe

Seqüências Especiais
Sintaxe

Operadores





- 3.
5 + 10.0.
3 / 2.
3 div 2.
true and (1 =< 3).
Sintaxe

Lógicos
Operadores
Relacionais
Aritméticos
Sintaxe

Operadores
Symbol
Purpose
,
Statement Separator
;
Statement Separator
.
Statement Terminator
->
Function or Guard
declaration
Sintaxe

Operadores de Listas

Concatenação ++


[1,2,3]++[4,5] = [1,2,3,4,5]
Subtração -
[1,2,3,2,1,2]--[2,1,2] = [3,1,2]
Sintaxe

Expressões



Não são lazy-evaluation
E1 + E2 – E1 e E2 são avaliadas.
Expressões curto-circuito


Expression_1 orelse Expression_2
Expression_1 andalso Expression_2
Sintaxe

Módulos



Em Erlang os códigos são divididos em
módulos
Cada módulo consiste de uma
seqüência de atributos e de declaração
de funções
Os atributos de um módulo definem
certas propriedades .

Ex.: Aridade de uma função
Sintaxe

Módulos

Atributos pré-definidos:





-module(Module)
-export(Functions)
-import(Module,Functions)
-compile(Options)
-vsn(Vsn)
Sintaxe

Funções



Seqüência de cláusulas separadas por
ponto e vírgula e finalizada por um
ponto
Cada cláusula consiste de uma cabeça
e de um corpo separado por ->
A cabeça consiste no nome da função
com uma lista de argumentos e uma
guarda opcional começando com when
Sintaxe

Funções
-module(fat).
-export([fatorial/1]).
fatorial(0) -> 1;
fatorial (N) when N > 0 -> N * fatorial (N - 1);
fatorial(_) -> 0.
fat:fatorial(6).
Sintaxe

Funções
-module(calculo).
-export[area/1].
area({quadrado, Lado}) ->
Lado* Lado;
area({retangulo, X, Y}) ->
X * Y;
area({circulo, Raio}) ->
% aproximadamente
3.14159 * Raio* Raio;
area({triangulo, A, B, C}) ->
S = (A + B + C)/2,
math:sqrt(S*(S-A)*(S-B)*(S-C)).
Sintaxe

Algumas Built-in Functions

atom_to_list(atom)


float_to_list(Float)




atom_to_list(hello) = “hello”
float_to_list(7.0) =
"7.00000000000000000000e+000"
tuple_size({a,b,c})
date(), time()
processes()
Sintaxe

Estruturas de Controle

IF
if
Guard1 -> Sequence1 ;
Guard2 ->Sequence2 ;
...
end
Sintaxe

Estruturas de Controle

IF
-module(modulo).
-export([maior_que/2]).
maior_que(X, Y) ->
if
X > Y ->
true;
true -> % átomo funcionando como um else
false
end.
Sintaxe

Estruturas de Controle

Case
case Expr of
Pattern1 [when Guard1] -> Seq1;
Pattern2 [when Guard2] -> Seq2;
...
end
Sintaxe

Estruturas de Controle

Case
-module(redondo).
-export([eh_redondo/1]).
eh_redondo(Forma) ->
case Forma of
{circulo, _} ->
true;
{quadrado, _} ->
false;
_ ->
false
end.
Sintaxe

Escopo das variáveis


Em Erlang, variáveis em uma cláusula
existem a partir do ponto que são
atribuídas até a última referência
textual da variável na cláusula
Variáveis dentro do IF e Case são
exportadas para o contexto de fora
delas.
Sintaxe

Escopo das variáveis
-module(teste).
-export([f/1,g/1,h/1]).
f(X) ->
case g(X) of
true -> A = h(X), B = 7;
false -> B = 6
end,
h(A),
h(B).
Sintaxe

Processo
Pid = spawn(Modulo, Funcao, [args])

Identifica um processo que vai executar
uma função
Pid = spawn(Node, Modulo, Funcao, [args])

Aplicação distribuída

Node = Nó remoto
Sintaxe

Send
Pid ! {a, 12}

Receive
receive
Message 1 -> ... ;
Message 2 -> ...;
...
end
Sintaxe
-module(echo).
-export([go/0, loop/0]).
go() ->
Pid = spawn(echo, loop, []),
Pid ! {self(), hello},
receive
{Pid2, Msg} ->
Print = "Mensagem:" ++ atom_to_list(Msg)
++ "~nRecebido de:" ++ pid_to_list(Pid2) ++ "~n",
io:format(Print,[])
end,
Pid ! stop.
loop() ->
receive
{From, Msg} ->
From ! {self(), Msg},
loop();
stop ->
true
end.
Sintaxe

Tratamento de erros
 Catch e Throw
-module(modulo).
-export([roda_funcao/1]).
funcao(1) -> hello;
funcao(2) -> throw({exception, abc});
funcao(3) -> tuple_to_list(a);
funcao(_) -> exit({myExit, 222}).
roda_funcao(X) ->
case catch funcao(X) of
{exception, Args} -> "erro1";
{'EXIT',{myExit, Code}} -> "erro2";
{'EXIT', What} -> "erro3";
Other -> Other
end.
Sintaxe
Palavras Reservadas:
after and andalso band begin bnot
bor bsl bsr bxor case catch cond div
end fun if let not of or orelse query
receive rem try when xor
 Comentários


%comentário
Sintaxe




Exercícios
fibonacci(X): Recebe um número inteiro positivo e
retorna o n-ésimo elemento da seqüência de Fibonacci.
elemento(X,Y): Recebe um número inteiro positivo e
uma lista para retornar o n-ésimo elemento da lista.
dobra1(X): Defina as funções dobra1(X) e dobra2()
na qual a função dobra1 recebe o valor X e envia uma
mensagem para o processo na qual a funcao dobra2
esta rodando. A funcao dobra2 duplica o valor passado
na mensagem e retorna o valor para o processo que
esta rodando dobra1
Roteiro









Introdução
Histórico
Características
Utilização
Especificação
Implementação e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendências
Vantagens








Suporte à implementação de sistemas em
Rede e telecomunicações
Eficiência e confiabilidade
Programação Concorrente
Suporte à programação de sistemas
distribuídos
Atualizado sem necessidade de
interromper sistema
Pode ser integrado com Java, C/C++...
Open Source
Suporte da Ericsson (pago)
Desvantagens



Desempenho (linguagem
interpretada)
Não disponível para muitas
plataformas (versão compilada)
Fraqueza em programação “baixo
nível”
Roteiro









Introdução
Histórico
Características
Utilização
Especificação
Implementação e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendências
Tendências

Open Source



Linguagem atualizada



Fácil literatura
Baixo Custo
Documentações recentes
Constantes Releases
Futuro promissor com sistemas
multi-processados e tendências dos
novos processadores “Multi-core”
Referências


Erlang. Wikipedia, the free encyclopedia.
http://en.wikipedia.org/wiki/Erlang_programming_language.
Linguagem de Programação Erlang. HoloCoCos @ TNT.br.
http://holococos.sjdr.com.br/2007/05/linguagem-de-programaoerlang.php.

Armstrong, Joe. Erlang: What´s all this fuss about Erlang?.
http://www.pragmaticprogrammer.com/articles/erlang.html

Open Source Erlang. www.erlang.org.


A History of Erlang.
http://portal.acm.org/citation.cfm?id=1238844.1238850&coll=G
UIDE&dl=%23url.coll.
Erlang Reference Manual. http://www.erlang.org/doc/doc5.5.4/doc/reference_manual/part_frame.html
Erlang Programming Language
?
Dúvidas
Download

ApresentacaoErlang