erlang programming language aluísio rodrigo (arfs) diego lima (dclal)

56
Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Upload: leonardo-villarruel

Post on 07-Apr-2016

233 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Erlang Programming Language

Aluísio Rodrigo (arfs)Diego Lima (dclal)

Page 2: 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

Page 3: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Introdução

“Programming Erlang, Software for a Concurrent World”Joe Armstrong, 2007

Page 4: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 5: 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

Page 6: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 7: 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

Page 8: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 9: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 10: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 11: 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

Page 12: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 13: 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

Page 14: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Especificação

Open Source Erlang www.erlang.org

Getting Started Documentation Examples Downloads

Source Binary

Page 15: 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

Page 16: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 17: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 18: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 19: 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

Page 20: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Sintaxe

Números Integers

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

Floats 17.368. -56.654. 12.34E-10.

Page 21: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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’.

Page 22: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Sintaxe

Tuplas {123, bcd}. {person, 'Joe', 'Armstrong'}.

Listas [123, 456]. [{person, 'Joe', 'Armstrong'}, {person,

'Robert', 'Virding'}].

Page 23: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 24: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 25: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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]

Page 26: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Sintaxe

Seqüências Especiais

Page 27: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Sintaxe

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

Page 28: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Sintaxe

Operadores

RelacionaisAritméticos

Lógicos

Page 29: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Sintaxe

OperadoresSymbol Purpose

, Statement Separator ; Statement Separator . Statement Terminator

-> Function or Guard declaration

Page 30: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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]

Page 31: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 32: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 33: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Sintaxe

Módulos Atributos pré-definidos:

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

Page 34: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 35: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 36: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 37: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 38: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Sintaxe

Estruturas de Controle IF

ifGuard1 -> Sequence1 ;Guard2 ->Sequence2 ;...end

Page 39: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Sintaxe

Estruturas de Controle IF

-module(modulo).-export([maior_que/2]).maior_que(X, Y) ->

ifX > Y ->true;true -> % átomo funcionando como um elsefalseend.

Page 40: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Sintaxe

Estruturas de Controle Case

case Expr ofPattern1 [when Guard1] -> Seq1;Pattern2 [when Guard2] -> Seq2;...end

Page 41: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Sintaxe

Estruturas de Controle Case

-module(redondo).-export([eh_redondo/1]).eh_redondo(Forma) ->case Forma of{circulo, _} ->true;{quadrado, _} ->false;_ ->falseend.

Page 42: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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.

Page 43: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 44: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 45: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Sintaxe

SendPid ! {a, 12}

Receivereceive

Message 1 -> ... ;Message 2 -> ...;...

end

Page 46: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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.

Page 47: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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 -> Otherend.

Page 48: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 49: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 50: 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

Page 51: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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)

Page 52: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Desvantagens

Desempenho (linguagem interpretada)

Não disponível para muitas plataformas (versão compilada)

Fraqueza em programação “baixo nível”

Page 53: 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

Page 54: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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”

Page 55: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

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

Page 56: Erlang Programming Language Aluísio Rodrigo (arfs) Diego Lima (dclal)

Erlang Programming Language

?Dúvidas