560 likes | 679 Views
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.
E N D
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
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 Utilização • 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'sErlang 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 truee 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 Lógicos Relacionais Aritméticos
Sintaxe • Operadores
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}) -> % 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 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) 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 função Pid = spawn(Node, Modulo, Funcao, [args]) • Aplicação distribuída • 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 • 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