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

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

Apr 07, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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