Erlang Programming Language

Post on 22-Jan-2016

28 views 0 download

Tags:

description

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. - PowerPoint PPT Presentation

Transcript of Erlang Programming Language

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