Você está na página 1de 56

Erlang Programming Language

Alusio Rodrigo (arfs)


Diego Lima (dclal)

Roteiro

Introduo
Histrico
Caractersticas
Utilizao
Especificao
Implementao e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendncias

Introduo

Programming Erlang, Software for a Concurrent World


Joe Armstrong, 2007

Introduo

Linguagem de programao
concorrente
Sistemas

de telecomunicaes
Sistemas de controle
Aplicaes distribudas
Soft Real-Time Applications

Open Source
til para Servidores de aplicao da
Internet

Roteiro

Introduo
Histrico
Caractersticas
Utilizao
Especificao
Implementao e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendncias

Histrico

Motivao: Nenhuma linguagem para sistemas de


telecomunicaes

1984 Formado Laboratrio de Computao da Ericsson

1987 criao do prottipo da linguagem Erlang

1991 Primeira Implementao rpida


1993 Distributed Erlang

Homenagem ao matemtico A.K. Erlang


Ericsson Language
Programao de sistemas de telecomunicaes

Suporte aplicaes concorrentes e distribudas

1998 Open Source

Roteiro

Introduo
Histrico
Caractersticas
Utilizao
Especificao
Implementao e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendncias

Caractersticas

Linguagem Funcional
Funes matemticas
Prova de propriedades

Concorrncia
Baseada em processos
Concorrncia explcita

O usurio pode controlar quais segmentos so


computados seqencialmente e quais so feitos em
paralelo

Processos s trocam informaes atravs de


mensagens

Caractersticas

Tempo Real
Projetada

para aplicaes leves em


tempo real.

Respostas na ordem de milissegundos.

Programao Distribuda
Possui

mecanismos que facilitam a


escrita de aplicaes que possam rodar
tanto em um nico computador como
em uma rede de computadores

Caractersticas

Robustez
Tolerncia a falhas
Operao contnua

Primitivas de carregamento de cdigo

Gerenciamento de Memria
Garbage Collector
Processos no compartilham memria

Integrao

Pode ser integrado facilmente com programas


em outras linguagens

Roteiro

Introduo
Histrico
Caractersticas
Utilizao
Especificao
Implementao e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendncias

Utilizao

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 Corua: VoD Cluster

Roteiro

Introduo
Histrico
Caractersticas
Utilizao
Especificao
Implementao e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendncias

Especificao

Open Source Erlang


www.erlang.org

Getting Started
Documentation
Examples
Downloads
Source
Binary

Roteiro

Introduo
Histrico
Caractersticas
Utilizao
Especificao
Implementao e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendncias

Implementao

Tipos de Implementao
Open

Source Erlang

Implementao mais popular


Inclui a biblioteca OTP (Open Telecom
Plataform)

Corba, Databases, GUI

Ericssons

Comercial Erlang

Essencialmente a mesma da Open Source


Oferece suporte

Implementao

Mquinas Virtuais

New BEAN (Bogdan/Bjrn's Erlang Abstract


Machine)

JAM (Joes Abstract Machine)

Utilizada na verso comercial


A mquina virtual original de Erlang inspirada em
Prolog

Old BEAN
Transformar de Erlang para C e depois para cdigo
nativo
Foi abandonado devido a problemas com eficincia

Ambientes de Desenvolvimento

Erlang Shell
Desenvolvido

ErlyBird
IDE

pela Ericsson

baseado no NetBeans

Erlide
Plug-in

para o Eclipse
Instalao:
http://www.cin.ufpe.br/~dclal/arquivos/instalacao.pdf

Roteiro

Introduo
Histrico
Caractersticas
Utilizao
Especificao
Implementao e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendncias

Sintaxe

Nmeros
Integers

10.
-234.
2#110111010. (BASE#VALOR)
$A. ($CHAR)

Floats

17.368.
-56.654.
12.34E-10.

Sintaxe

tomos
O

valor do tomo sua prpria


declarao
O tamanho do tomo indefinido
Deve possuir aspas caso no comece
com uma letra em minsculo ou
contenha caracteres especiais que no
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

Variveis
Devem

comear com a primeira letra


maiscula
Ao contrrio dos tomos, s alguns
caracteres so permitidos
A varivel s pode receber o valor
apenas uma vez
Abc
A_long_variable_name
AnObjectOrientatedVariableName

Sintaxe

Casamento de Padro
{A,

B, C} = {10, foo, bar}

A = 10, B = foo, C = bar

[H|T]

= [1,2,3,4]

H = 1, T = [2,3,4]

{A,_,[B|_],{C}}

= {abc,1,[2,3],{4}}

A = abc, B = 2, C = 4

Sintaxe

Boolean
No

existe o tipo booleano em Erlang.


So utilizados os tomos true e false.

String
So

representaes de listas de inteiros

hello = [$h,$e,$l,$l,$o] =
[104,101,108,108,111]

Sintaxe

Seqncias Especiais

Sintaxe

Operadores
- 3.
5 + 10.0.
3 / 2.
3 div 2.
true and (1 =< 3).

Sintaxe

Lgicos

Operadores

Relacionais
Aritmticos

Sintaxe

Operadores
Symbol

Purpose

Statement Separator

Statement Separator

Statement Terminator

->

Function or Guard
declaration

Sintaxe

Operadores de Listas
Concatenao

++

[1,2,3]++[4,5]

Subtrao

= [1,2,3,4,5]

--

[1,2,3,2,1,2]--[2,1,2]

= [3,1,2]

Sintaxe

Expresses
No

so lazy-evaluation
E1 + E2 E1 e E2 so avaliadas.

Expresses curto-circuito
Expression_1

orelse Expression_2
Expression_1 andalso Expression_2

Sintaxe

Mdulos
Em

Erlang os cdigos so divididos em


mdulos
Cada mdulo consiste de uma
seqncia de atributos e de declarao
de funes
Os atributos de um mdulo definem
certas propriedades .

Ex.: Aridade de uma funo

Sintaxe

Mdulos
Atributos

pr-definidos:

-module(Module)
-export(Functions)
-import(Module,Functions)
-compile(Options)
-vsn(Vsn)

Sintaxe

Funes
Seqncia

de clusulas separadas por


ponto e vrgula e finalizada por um
ponto
Cada clusula consiste de uma cabea
e de um corpo separado por ->
A cabea consiste no nome da funo
com uma lista de argumentos e uma
guarda opcional comeando com when

Sintaxe

Funes

-module(fat).
-export([fatorial/1]).
fatorial(0) -> 1;
fatorial (N) when N > 0 -> N * fatorial (N - 1);
fatorial(_) -> 0.

fat:fatorial(6).

Sintaxe

Funes

-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)

atom_to_list(hello) = hello

float_to_list(Float)

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 variveis


Em

Erlang, variveis em uma clusula


existem a partir do ponto que so
atribudas at a ltima referncia
textual da varivel na clusula
Variveis dentro do IF e Case so
exportadas para o contexto de fora
delas.

Sintaxe

Escopo das variveis

-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 funo

Pid = spawn(Node, Modulo, Funcao, [args])

Aplicao distribuda

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
Comentrios

%comentrio

Sintaxe

Exerccios

fibonacci(X): Recebe um nmero inteiro positivo e


retorna o n-simo elemento da seqncia de Fibonacci.

elemento(X,Y): Recebe um nmero inteiro positivo e


uma lista para retornar o n-simo elemento da lista.

dobra1(X): Defina as funes dobra1(X) e dobra2()


na qual a funo 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

Introduo
Histrico
Caractersticas
Utilizao
Especificao
Implementao e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendncias

Vantagens

Suporte implementao de sistemas em


Rede e telecomunicaes
Eficincia e confiabilidade
Programao Concorrente
Suporte programao de sistemas
distribudos
Atualizado sem necessidade de
interromper sistema
Pode ser integrado com Java, C/C++...
Open Source
Suporte da Ericsson (pago)

Desvantagens

Desempenho (linguagem
interpretada)
No disponvel para muitas
plataformas (verso compilada)
Fraqueza em programao baixo
nvel

Roteiro

Introduo
Histrico
Caractersticas
Utilizao
Especificao
Implementao e Ambientes de
Desenvolvimento
Sintaxe
Vantagens e Desvantagens
Tendncias

Tendncias

Open Source
Fcil

literatura
Baixo Custo

Linguagem atualizada
Documentaes

recentes
Constantes Releases

Futuro promissor com sistemas


multi-processados e tendncias dos
novos processadores Multi-core

Referncias

Erlang. Wikipedia, the free encyclopedia.


http://en.wikipedia.org/wiki/Erlang_programming_language.

Linguagem de Programao Erlang. HoloCoCos @ TNT.br.


http://holococos.sjdr.com.br/2007/05/linguagem-de-programaoerlang.php.

Armstrong, Joe. Erlang: Whats 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=GUIDE&dl=%23url.coll.

Erlang Reference Manual. http://www.erlang.org/doc/doc5.5.4/doc/reference_manual/part_frame.html

Erlang Programming Language

?
Dvidas