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 Homenagem ao matemático A.K. Erlang Ericsson Language Programação de sistemas de telecomunicações
1991 – Primeira Implementação rápida 1993 – Distributed Erlang
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
Primitivas de carregamento de código
Gerenciamento de Memória 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) Utilizada na versão comercial
JAM (Joe’s Abstract Machine) 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 Desenvolvido pela Ericsson
ErlyBird 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}
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 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
Operadores
RelacionaisAritméticos
Lógicos
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}) ->% aproximadamente3.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
ifGuard1 -> Sequence1 ;Guard2 ->Sequence2 ;...end
Sintaxe
Estruturas de Controle IF
-module(modulo).-export([maior_que/2]).maior_que(X, Y) ->
ifX > Y ->
true;true -> % átomo funcionando como um else
falseend.
Sintaxe
Estruturas de Controle Case
case Expr ofPattern1 [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;_ ->falseend.
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) oftrue -> A = h(X), B = 7;false -> B = 6end,h(A),h(B).
Sintaxe
ProcessoPid = 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
SendPid ! {a, 12}
Receivereceive
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 Fácil literatura Baixo Custo
Linguagem atualizada 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-programao-erlang.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=GUIDE&dl=%23url.coll.
Erlang Reference Manual. http://www.erlang.org/doc/doc-5.5.4/doc/reference_manual/part_frame.html
Erlang Programming Language
?Dúvidas