1 / 56

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.

shawna
Download Presentation

Erlang Programming Language

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Roteiro • Introdução • Histórico • Características • Utilização • Especificação • Implementação e Ambientes de Desenvolvimento • Sintaxe • Vantagens e Desvantagens • Tendências

  3. Introdução “Programming Erlang, Software for a Concurrent World” Joe Armstrong, 2007

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

  5. Roteiro • Introdução • Histórico • Características • Utilização • Especificação • Implementação e Ambientes de Desenvolvimento • Sintaxe • Vantagens e Desvantagens • Tendências

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

  7. Roteiro • Introdução • Histórico • Características • Utilização • Especificação • Implementação e Ambientes de Desenvolvimento • Sintaxe • Vantagens e Desvantagens • Tendências

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

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

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

  11. Roteiro • Introdução • Histórico • Características • Utilização • Especificação • Implementação e Ambientes de Desenvolvimento • Sintaxe • Vantagens e Desvantagens • Tendências

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

  13. Roteiro • Introdução • Histórico • Características • Utilização • Especificação • Implementação e Ambientes de Desenvolvimento • Sintaxe • Vantagens e Desvantagens • Tendências

  14. Especificação • Open Source Erlang • www.erlang.org • Getting Started • Documentation • Examples • Downloads • Source • Binary

  15. Roteiro • Introdução • Histórico • Características • Utilização • Especificação • Implementação e Ambientes de Desenvolvimento • Sintaxe • Vantagens e Desvantagens • Tendências

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

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

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

  19. Roteiro • Introdução • Histórico • Características • Utilização • Especificação • Implementação e Ambientes de Desenvolvimento • Sintaxe • Vantagens e Desvantagens • Tendências

  20. Sintaxe • Números • Integers • 10. • -234. • 2#110111010. (BASE#VALOR) • $A. ($CHAR) • Floats • 17.368. • -56.654. • 12.34E-10.

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

  22. Sintaxe • Tuplas • {123, bcd}. • {person, 'Joe', 'Armstrong'}. • Listas • [123, 456]. • [{person, 'Joe', 'Armstrong'}, {person, 'Robert', 'Virding'}].

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

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

  25. 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]

  26. Sintaxe • Seqüências Especiais

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

  28. Sintaxe • Operadores Lógicos Relacionais Aritméticos

  29. Sintaxe • Operadores

  30. 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]

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

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

  33. Sintaxe • Módulos • Atributos pré-definidos: • -module(Module) • -export(Functions) • -import(Module,Functions) • -compile(Options) • -vsn(Vsn)

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

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

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

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

  38. Sintaxe • Estruturas de Controle • IF if Guard1 -> Sequence1 ; Guard2 ->Sequence2 ; ... end

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

  40. Sintaxe • Estruturas de Controle • Case case Expr of Pattern1 [when Guard1] -> Seq1; Pattern2 [when Guard2] -> Seq2; ... end

  41. Sintaxe • Estruturas de Controle • Case -module(redondo). -export([eh_redondo/1]). eh_redondo(Forma) -> case Forma of {circulo, _} -> true; {quadrado, _} -> false; _ -> false end.

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

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

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

  45. Sintaxe • Send Pid ! {a, 12} • Receive receive Message 1 -> ... ; Message 2 -> ...; ... end

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

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

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

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

  50. Roteiro • Introdução • Histórico • Características • Utilização • Especificação • Implementação e Ambientes de Desenvolvimento • Sintaxe • Vantagens e Desvantagens • Tendências

More Related