SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
A linguagem de programação Erlang


       Paulo Ferreira paf(a)dei.isep.ipp.pt
          Jornadas Científicas do ISEP
               9 de Maio de 2001
Como ensinar programação concorrente e
                distribuída?


• Alunos sem experiência de trabalho com processos (1º ano de funcionamento
  da licenciatura).
• Ausência de sistemas paralelos.
• Inexistência de verbas.
• Foco na robustez e elegância e não na “performance absoluta”.
• Objectivo: Levar os alunos a pensar de uma forma clara e correcta.
O que é o Erlang?


• Uma linguagem funcional, de uso geral, com suporte incorporado para
  concorrência, distribuição e tolerância a falhas.
• OTP (Open Telecom Platform) é uma plataforma de desenvolvimento de
  sistemas de telecomunicações.
• É constituída por um sistema “runtime”, um conjunto de componentes escritos
  principalmente em Erlang, e um conjunto de princípios de design de
  programas.
• Normalmente é usado o conjunto.
O que é uma linguagem funcional?


• Não se mudam os valores das variáveis.
• As funções não possuem “efeitos laterais”.
• Exemplo de efeito lateral: variáveis globais.
• Sem efeitos laterais: puramente funcional.
• Sem efeitos laterais: É mais fácil analizar um programa do ponto de vista
  matemático.
• Sem efeitos laterais: Cada função pode ser analizada independentemente do
  ambiente.
• O Erlang não é uma linguagem puramente funcional (I/O e comunicação).
Funções como “caixas negras”




• Para um determinado valor de entrada, a saída é sempre a mesma.
• Podemos “esquecer” o seu interior.
• Temos os “software ICs”, componentes modulares que são independentes entre
  si.
História do Erlang


•   Pesquisa nos laboratórios Ericsson
•   Que linguagem usar para desenvolver fácilmente sistemas robustos e fiáveis?
•   Experiências com várias linguagens
•   Desenvolvimento interno do Erlang
•   1987 -Erlang Primitivo
•   1998 - Lançamento em Open Source
Exemplo de programa


     -module(mathlib).
     -export([factorial/1]).


     factorial(1)->1;
     factorial(N)->N*factorial(N-1).


• Chamada da função: mathlib:factorial(5)


• É uma linguagem declarativa, com influência do Prolog na sintaxe, mas não
  existe mecanismo de backtracking.
• O facto de ser declarativa confere-lhe uma grande expressividade.
• Não existe declaração do tipo de dados, e a gestão de memória é automática.
Tipos de dados


•   Números: Inteiros e Floats
•   Àtomos
•   Tuplos
•   Listas
•   Pids (Process Ids)
•   Ports (canais de comunicação com programas escritos noutras linguagens)
•   Referências (objectos únicos ao nível de vários nós)
•   Binários (para manipulação de pacotes ou outros conjuntos de bits)
Mais exemplos


    area({quadrado,Lado})->Lado*Lado;
    area({rectangulo,Lado1,Lado2})->Lado1*Lado2;
    area(X)->{nao_sei_fazer_area,X}.


• O mecanismo de “pattern matching” ajuda à clareza do programa e podemos
  “etiquetar”os tuplos com átomos, para que tudo fique mais claro.


    sort([Pivot|T]) ->
        sort([ X || X <- T, X < Pivot])
        ++ [Pivot]
        ++ sort([ X || X <- T, X >= Pivot]);
    sort([]) -> [].
Mais um exemplo


-define(PROTO1,22).
-define(PROTO2,33).
-define(PROTO3,1256).
%%   Tratar um pacote segundo o protocolo certo


tratar(<<?PROTO1:8,Lixo:24,Chicha/binary>>)->func1(Chicha);
tratar(<<?PROTO2:8,Lixo:32,Chicha/binary>>)->func2(Chicha);
tratar(<<?PROTO3:16,Chicha/binary>>)->func3(Chicha);
tratar(X)->protocolo_nao_reconhecido(X).
Processos e mensagens


    Pid=spawn(m,f,[Arg1,Arg2])


    Pid ! Mensagem


    receive
          Mensagem1 -> acção1;
          Mensagem2 -> acção2;
          after Timeout -> acção_timeout
    end


• A comunicação é feita através de mensagens, cujo envio tem sempre sucesso.
Exemplo de um servidor


start() -> spawn( m, init, [...]).


init(...) -><initialization>,
   loop(...).
loop(...) ->     receive
           stop -> true;
           Pattern1 -> <actions>, loop(...);
           ...
           PatternN -><actions>, loop(...)
       end.
Mais facilidades para processos


• Mensagens de “aviso” quando um processo “ligado” termina.
• Todas as excepções são locais.
• Isto permite a constituição de uma hierarquia de processos para uma maior
  robustez.
• Processos podem ser registados com um “nome” sendo acedidos através do
  nome.
• “Upgrade” do código sem parar o processo.
Distribuição


• Arrancar os nós de forma correcta.
     Pid=spawn(nó,m,f,[Arg1,Arg2])


• A partir daí tudo funciona exactamente na mesma.
“Last call optimization”


    servidor(…)->recebe_mensagem(…),
             trata_mensagem(…),
             servidor(…).
• Temos uma função recursiva que se chama a si própria.
• Como existe “LCO” a função corre num espaço constante.
• Isto é verdadeiro para funções que terminam com uma chamada a si próprias,
  sem cálculos pendentes.
Bibliotecas e interfaces existentes (exemplos)


•   Compilador, kernel e biblioteca standard
•   Handler para eventos e alarmes, SNMP, medidor de avaliação.
•   ASN1, interfaces de baixo nível para C e Java, Servidor Web e cliente Ftp.
•   Chamada a objectos COM em windows, SSL e criptografia.
•   Base de dados Mnesia (tempo real) e interface ODBC.
•   Serviços CORBA e compilador IDL.
•   Ferramentas de debugging e monitorização.
Exemplos prático de uso:


•   Switch ATM AXD301 10-160 Gbits.
•   ANx-DSL nó de acesso ADSL
•   Mobility Server
•   1º Demo de GPRS
•   Eddieware
•   Bluetail - Web Prioritizer + Mail Robustifier (21 meses, 25 empregados, $152M
    USD)
Características validadas na prática


•   Grande número de processos por nó - 4000 no AXD301).
•   “Soft RealTime” - Custo das chamadas.
•   Sistemas distribuídos- A versão de 40 Gbits do AXD301 tem 72 processadores.
•   Comunicação com hardware - Interfaces standard para C e device drivers,
•   Sistemas grandes: AXD301 Rel3.2 tem 1M linhas de Erlang.
•   Funcionalidade complexa: AXD301 protoc. ITU + ATM Forum.
•   Operação contínua: Mobility Server (1994) com 400 produtos.
•   Manutenção do software: Upgrades sem parar o sistema.
•   Requisitos de qualidade e fiabilidade: GPRS 99.995% de disponibilidade.
•   Tolerância a falhas de hardware e software: falhando um dos processadores do
    GPRS apenas baixa a capacidade do sistema.
Sumário da experiência


• Trauma inicial: “Para quê?”
• “Ah, é parecido com prolog!”
• Passagem da programação imperativa a funcional, pode “bloquear” alunos que
  encaram o Erlang como mais uma “linguagem normal”.
• Realização de trabalho prático ajuda na compreensão da linguagem.
• No final, reacção positiva por parte dos alunos.
• Ajuda recebida dos docentes envolvidos.
• Trabalho de projecto sobre o Eddie.
• Usado na disciplina de AISC
Trabalho futuro em OC


•   Trabalhos práticos mais complexos.
•   Uso mais aprofundado das facilidades do OTP.
•   Uso e implementação de protocolos de comunicação mais elaborados.
•   Interface com outras linguagens.
Preconceitos iniciais dos alunos


•   “Se isso não é usado para que é que serve?”
•   “Para que é que temos de aprender outra linguagem?”
•   “Uma linguagem não chega para todos os tipos de programas?”
•   “Se no meu emprego trabalho na linguagem X, de que é que me serve isso?”
Afinal o que é programar?


• Resolver problemas decompondo-os em problemas mais simples.
• Paradigmas da programação fornecem maneiras de estruturar a
  “fragmentação” dos problemas.
• As linguagens são uma forma de “explicitar” os conceitos que possuímos.
• Se o conceito não existir na linguagem teremos problemas em o expresssar.
Vantagens das Linguagens Funcionais


• Se as funções não possuem efeitos laterais então podem ser analisadas de uma
  forma independente do contexto.
• Torna-se mais fácil a decomposição do problema/programa em funções.
• Torna-se mais fácil a reutilização de código.
• Torna-se mais fácil (ou possível) a análise formal do programa.
• Torna-se mais fácil a utilização de funções como parâmetros de outras funções.
Porque é que não são mais usadas?


• A indústria não tem tempo para ser criativa, e a academia não é flexivel devido
  a restrições várias.
• Trauma das teorias matemáticas normalmente associadas às linguagens
  funcionais.
• Carga semântica extremamente forte de algumas linguagens funcionais.
• Vistas mais como assunto de pesquisa do que como ferramentas práticas.
• Falta de “ferramentas CASE”.
• O debate sobre linguagens de programação assume muitas vezes contornos de
  “fanatismo religioso” onde se defende o que se conhece, contra a incerteza do
  que não se conhece.
Problemas do mundo académico


•   Conservadorismo.
•   Psicose de “seguir as linguagens que a indústria quer”.
•   A indústria na realidade não quer pessoas que saibam a linguagem X.
•   A indústria quer pessoas que saibam programar, o que é algo muito diferente.
•   A indústria deseja pessoas que digam: “Esta linguagem não presta, existe uma
    muito melhor, que nos pode fazer ganhar muito mais dinheiro.”
Problemas da indústria


• Decisões estratégicas ao nível da tecnologia realizadas com o completo
  desconhecimento dos problemas em causa.
• Escolha de candidatos a empregos baseada no número de palavras-chave que
  aparece no curriculum.
• Medo da diferença.
Conclusões


• As linguagens funcionais podem ser ensinadas/aprendidas fácilmente,
  simplificando a escrita e compreensão de algoritmos avançados de
  manipulação de dados.
• É recomendável que no curso seja dada uma maior visibilidade e utilização às
  linguagens funcionais.
• Cada vez mais os programas são constítuídos por um grande número de
  processos que interagem entre si, e os paradigmas tradicionais de programação
  têm problemas de adaptação a estes novos modelos computacionais, enquanto
  que linguagens como o Erlang se adaptam de uma forma notável.

Mais conteúdo relacionado

Mais procurados

Evolução dos sistemas operativos da windows
Evolução dos sistemas operativos da windowsEvolução dos sistemas operativos da windows
Evolução dos sistemas operativos da windowsFrogFAT
 
Aula 1 sistema operacional linux
Aula 1 sistema operacional linuxAula 1 sistema operacional linux
Aula 1 sistema operacional linuxRogério Cardoso
 
O que eu deveria saber antes de testar performance?
O que eu deveria saber antes de testar performance?O que eu deveria saber antes de testar performance?
O que eu deveria saber antes de testar performance?Ariane Izac
 
Ejercicios som 22 2-11
Ejercicios som 22 2-11Ejercicios som 22 2-11
Ejercicios som 22 2-11Kalotery
 
Sistemas Operativo Windows
Sistemas Operativo WindowsSistemas Operativo Windows
Sistemas Operativo WindowsEnrique Marenco
 
Aula: Características dos dispositivos móveis
Aula: Características dos dispositivos móveisAula: Características dos dispositivos móveis
Aula: Características dos dispositivos móveisJanynne Gomes
 
Curso Intensivo de N8N
Curso Intensivo de N8NCurso Intensivo de N8N
Curso Intensivo de N8NAutotic
 
Sistema Operativos
Sistema OperativosSistema Operativos
Sistema OperativosBugui94
 
Sistemas Operativos de Aplicaciones moviles
Sistemas Operativos de Aplicaciones movilesSistemas Operativos de Aplicaciones moviles
Sistemas Operativos de Aplicaciones movilesBriana Paz Guerra
 
Análise Estática de Código
Análise Estática de CódigoAnálise Estática de Código
Análise Estática de CódigoRicardo Terra
 
Windows 10 power point sli
Windows 10 power point sliWindows 10 power point sli
Windows 10 power point sliLili Delgado
 
Sistemas Operacionais - Aula 04 - Prática 1 - (SOSim)
Sistemas Operacionais - Aula 04 - Prática 1 - (SOSim)Sistemas Operacionais - Aula 04 - Prática 1 - (SOSim)
Sistemas Operacionais - Aula 04 - Prática 1 - (SOSim)Leinylson Fontinele
 
02 - A evolução do Microsoft Windows - v1.0
02 - A evolução do Microsoft Windows - v1.002 - A evolução do Microsoft Windows - v1.0
02 - A evolução do Microsoft Windows - v1.0César Augusto Pessôa
 

Mais procurados (20)

Evolução dos sistemas operativos da windows
Evolução dos sistemas operativos da windowsEvolução dos sistemas operativos da windows
Evolução dos sistemas operativos da windows
 
Aula 1 sistema operacional linux
Aula 1 sistema operacional linuxAula 1 sistema operacional linux
Aula 1 sistema operacional linux
 
Windows 7
Windows 7Windows 7
Windows 7
 
O que eu deveria saber antes de testar performance?
O que eu deveria saber antes de testar performance?O que eu deveria saber antes de testar performance?
O que eu deveria saber antes de testar performance?
 
Ejercicios som 22 2-11
Ejercicios som 22 2-11Ejercicios som 22 2-11
Ejercicios som 22 2-11
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Sistemas Operativo Windows
Sistemas Operativo WindowsSistemas Operativo Windows
Sistemas Operativo Windows
 
Engenharia Web
Engenharia WebEngenharia Web
Engenharia Web
 
Aula: Características dos dispositivos móveis
Aula: Características dos dispositivos móveisAula: Características dos dispositivos móveis
Aula: Características dos dispositivos móveis
 
Curso Intensivo de N8N
Curso Intensivo de N8NCurso Intensivo de N8N
Curso Intensivo de N8N
 
Virtualização
VirtualizaçãoVirtualização
Virtualização
 
Sistema Operativos
Sistema OperativosSistema Operativos
Sistema Operativos
 
Sistemas Operativos de Aplicaciones moviles
Sistemas Operativos de Aplicaciones movilesSistemas Operativos de Aplicaciones moviles
Sistemas Operativos de Aplicaciones moviles
 
Análise Estática de Código
Análise Estática de CódigoAnálise Estática de Código
Análise Estática de Código
 
Fundamentos de CSS
Fundamentos de CSSFundamentos de CSS
Fundamentos de CSS
 
Android
AndroidAndroid
Android
 
Windows 10 power point sli
Windows 10 power point sliWindows 10 power point sli
Windows 10 power point sli
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Sistemas Operacionais - Aula 04 - Prática 1 - (SOSim)
Sistemas Operacionais - Aula 04 - Prática 1 - (SOSim)Sistemas Operacionais - Aula 04 - Prática 1 - (SOSim)
Sistemas Operacionais - Aula 04 - Prática 1 - (SOSim)
 
02 - A evolução do Microsoft Windows - v1.0
02 - A evolução do Microsoft Windows - v1.002 - A evolução do Microsoft Windows - v1.0
02 - A evolução do Microsoft Windows - v1.0
 

Semelhante a A linguagem de programação Erlang

A Evolução de Lua (Pycon Brasil 2008)
A Evolução de Lua (Pycon Brasil  2008)A Evolução de Lua (Pycon Brasil  2008)
A Evolução de Lua (Pycon Brasil 2008)guest55e576
 
Aula 02 informática aplicada - sistemas operacionais
Aula 02  informática aplicada - sistemas operacionaisAula 02  informática aplicada - sistemas operacionais
Aula 02 informática aplicada - sistemas operacionaisRobson Ferreira
 
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfPARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfAthena542429
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosRafael Chaves
 
Aula01 ip introducao
Aula01 ip introducaoAula01 ip introducao
Aula01 ip introducaoBerg Oliveira
 
Técnicas_Implementação
Técnicas_ImplementaçãoTécnicas_Implementação
Técnicas_ImplementaçãoWagner Zaparoli
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaSérgio Souza Costa
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosRafael Martins
 
C curso - notas de aula
C   curso - notas de aulaC   curso - notas de aula
C curso - notas de aulaLoAlves21
 
Introdução a Lógica e Conceitos de Programação.ppt
Introdução a Lógica e Conceitos de Programação.pptIntrodução a Lógica e Conceitos de Programação.ppt
Introdução a Lógica e Conceitos de Programação.pptBrennoPimenta
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesAdriano Teixeira de Souza
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoElaine Cecília Gatto
 

Semelhante a A linguagem de programação Erlang (20)

A Evolução de Lua (Pycon Brasil 2008)
A Evolução de Lua (Pycon Brasil  2008)A Evolução de Lua (Pycon Brasil  2008)
A Evolução de Lua (Pycon Brasil 2008)
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
Mini Curso de C
Mini Curso de CMini Curso de C
Mini Curso de C
 
Pi1415 tudo
Pi1415 tudoPi1415 tudo
Pi1415 tudo
 
Aula 02 informática aplicada - sistemas operacionais
Aula 02  informática aplicada - sistemas operacionaisAula 02  informática aplicada - sistemas operacionais
Aula 02 informática aplicada - sistemas operacionais
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfPARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
 
Aula 3 - Software
Aula 3 - SoftwareAula 3 - Software
Aula 3 - Software
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
 
Aula01 ip introducao
Aula01 ip introducaoAula01 ip introducao
Aula01 ip introducao
 
Técnicas_Implementação
Técnicas_ImplementaçãoTécnicas_Implementação
Técnicas_Implementação
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
 
C curso - notas de aula
C   curso - notas de aulaC   curso - notas de aula
C curso - notas de aula
 
Introdução a Lógica e Conceitos de Programação.ppt
Introdução a Lógica e Conceitos de Programação.pptIntrodução a Lógica e Conceitos de Programação.ppt
Introdução a Lógica e Conceitos de Programação.ppt
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - Classificações
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de Programação
 
Haskell - Introdução
Haskell - IntroduçãoHaskell - Introdução
Haskell - Introdução
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 

Mais de elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 

Mais de elliando dias (20)

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slides
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 

Último

PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...
PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...
PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...Priscila Ribeiro Chagas
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Dirceu Resende
 
TI EXAMES - NIST Cybersecurity Framework.pdf
TI EXAMES - NIST Cybersecurity Framework.pdfTI EXAMES - NIST Cybersecurity Framework.pdf
TI EXAMES - NIST Cybersecurity Framework.pdfRodrigoMori7
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Dirceu Resende
 
O papel da automação de processos no mundo do trabalho pós-moderno
O papel da automação de processos no mundo do trabalho pós-modernoO papel da automação de processos no mundo do trabalho pós-moderno
O papel da automação de processos no mundo do trabalho pós-modernoDenis Pereira Raymundo
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Dirceu Resende
 
Knowtree - Extração de Dados com o KAPE.
Knowtree - Extração de Dados com o KAPE.Knowtree - Extração de Dados com o KAPE.
Knowtree - Extração de Dados com o KAPE.Thiago lindolfo
 

Último (7)

PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...
PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...
PRODUCT OPS - COMO APROVEITAR O MÁXIMO DESTA NOVA TENDÊNCIA - Priscila Chagas...
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
TI EXAMES - NIST Cybersecurity Framework.pdf
TI EXAMES - NIST Cybersecurity Framework.pdfTI EXAMES - NIST Cybersecurity Framework.pdf
TI EXAMES - NIST Cybersecurity Framework.pdf
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
O papel da automação de processos no mundo do trabalho pós-moderno
O papel da automação de processos no mundo do trabalho pós-modernoO papel da automação de processos no mundo do trabalho pós-moderno
O papel da automação de processos no mundo do trabalho pós-moderno
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
Knowtree - Extração de Dados com o KAPE.
Knowtree - Extração de Dados com o KAPE.Knowtree - Extração de Dados com o KAPE.
Knowtree - Extração de Dados com o KAPE.
 

A linguagem de programação Erlang

  • 1. A linguagem de programação Erlang Paulo Ferreira paf(a)dei.isep.ipp.pt Jornadas Científicas do ISEP 9 de Maio de 2001
  • 2. Como ensinar programação concorrente e distribuída? • Alunos sem experiência de trabalho com processos (1º ano de funcionamento da licenciatura). • Ausência de sistemas paralelos. • Inexistência de verbas. • Foco na robustez e elegância e não na “performance absoluta”. • Objectivo: Levar os alunos a pensar de uma forma clara e correcta.
  • 3. O que é o Erlang? • Uma linguagem funcional, de uso geral, com suporte incorporado para concorrência, distribuição e tolerância a falhas. • OTP (Open Telecom Platform) é uma plataforma de desenvolvimento de sistemas de telecomunicações. • É constituída por um sistema “runtime”, um conjunto de componentes escritos principalmente em Erlang, e um conjunto de princípios de design de programas. • Normalmente é usado o conjunto.
  • 4. O que é uma linguagem funcional? • Não se mudam os valores das variáveis. • As funções não possuem “efeitos laterais”. • Exemplo de efeito lateral: variáveis globais. • Sem efeitos laterais: puramente funcional. • Sem efeitos laterais: É mais fácil analizar um programa do ponto de vista matemático. • Sem efeitos laterais: Cada função pode ser analizada independentemente do ambiente. • O Erlang não é uma linguagem puramente funcional (I/O e comunicação).
  • 5. Funções como “caixas negras” • Para um determinado valor de entrada, a saída é sempre a mesma. • Podemos “esquecer” o seu interior. • Temos os “software ICs”, componentes modulares que são independentes entre si.
  • 6. História do Erlang • Pesquisa nos laboratórios Ericsson • Que linguagem usar para desenvolver fácilmente sistemas robustos e fiáveis? • Experiências com várias linguagens • Desenvolvimento interno do Erlang • 1987 -Erlang Primitivo • 1998 - Lançamento em Open Source
  • 7. Exemplo de programa -module(mathlib). -export([factorial/1]). factorial(1)->1; factorial(N)->N*factorial(N-1). • Chamada da função: mathlib:factorial(5) • É uma linguagem declarativa, com influência do Prolog na sintaxe, mas não existe mecanismo de backtracking. • O facto de ser declarativa confere-lhe uma grande expressividade. • Não existe declaração do tipo de dados, e a gestão de memória é automática.
  • 8. Tipos de dados • Números: Inteiros e Floats • Àtomos • Tuplos • Listas • Pids (Process Ids) • Ports (canais de comunicação com programas escritos noutras linguagens) • Referências (objectos únicos ao nível de vários nós) • Binários (para manipulação de pacotes ou outros conjuntos de bits)
  • 9. Mais exemplos area({quadrado,Lado})->Lado*Lado; area({rectangulo,Lado1,Lado2})->Lado1*Lado2; area(X)->{nao_sei_fazer_area,X}. • O mecanismo de “pattern matching” ajuda à clareza do programa e podemos “etiquetar”os tuplos com átomos, para que tudo fique mais claro. sort([Pivot|T]) -> sort([ X || X <- T, X < Pivot]) ++ [Pivot] ++ sort([ X || X <- T, X >= Pivot]); sort([]) -> [].
  • 10. Mais um exemplo -define(PROTO1,22). -define(PROTO2,33). -define(PROTO3,1256). %% Tratar um pacote segundo o protocolo certo tratar(<<?PROTO1:8,Lixo:24,Chicha/binary>>)->func1(Chicha); tratar(<<?PROTO2:8,Lixo:32,Chicha/binary>>)->func2(Chicha); tratar(<<?PROTO3:16,Chicha/binary>>)->func3(Chicha); tratar(X)->protocolo_nao_reconhecido(X).
  • 11. Processos e mensagens Pid=spawn(m,f,[Arg1,Arg2]) Pid ! Mensagem receive Mensagem1 -> acção1; Mensagem2 -> acção2; after Timeout -> acção_timeout end • A comunicação é feita através de mensagens, cujo envio tem sempre sucesso.
  • 12. Exemplo de um servidor start() -> spawn( m, init, [...]). init(...) -><initialization>, loop(...). loop(...) -> receive stop -> true; Pattern1 -> <actions>, loop(...); ... PatternN -><actions>, loop(...) end.
  • 13. Mais facilidades para processos • Mensagens de “aviso” quando um processo “ligado” termina. • Todas as excepções são locais. • Isto permite a constituição de uma hierarquia de processos para uma maior robustez. • Processos podem ser registados com um “nome” sendo acedidos através do nome. • “Upgrade” do código sem parar o processo.
  • 14. Distribuição • Arrancar os nós de forma correcta. Pid=spawn(nó,m,f,[Arg1,Arg2]) • A partir daí tudo funciona exactamente na mesma.
  • 15. “Last call optimization” servidor(…)->recebe_mensagem(…), trata_mensagem(…), servidor(…). • Temos uma função recursiva que se chama a si própria. • Como existe “LCO” a função corre num espaço constante. • Isto é verdadeiro para funções que terminam com uma chamada a si próprias, sem cálculos pendentes.
  • 16. Bibliotecas e interfaces existentes (exemplos) • Compilador, kernel e biblioteca standard • Handler para eventos e alarmes, SNMP, medidor de avaliação. • ASN1, interfaces de baixo nível para C e Java, Servidor Web e cliente Ftp. • Chamada a objectos COM em windows, SSL e criptografia. • Base de dados Mnesia (tempo real) e interface ODBC. • Serviços CORBA e compilador IDL. • Ferramentas de debugging e monitorização.
  • 17. Exemplos prático de uso: • Switch ATM AXD301 10-160 Gbits. • ANx-DSL nó de acesso ADSL • Mobility Server • 1º Demo de GPRS • Eddieware • Bluetail - Web Prioritizer + Mail Robustifier (21 meses, 25 empregados, $152M USD)
  • 18. Características validadas na prática • Grande número de processos por nó - 4000 no AXD301). • “Soft RealTime” - Custo das chamadas. • Sistemas distribuídos- A versão de 40 Gbits do AXD301 tem 72 processadores. • Comunicação com hardware - Interfaces standard para C e device drivers, • Sistemas grandes: AXD301 Rel3.2 tem 1M linhas de Erlang. • Funcionalidade complexa: AXD301 protoc. ITU + ATM Forum. • Operação contínua: Mobility Server (1994) com 400 produtos. • Manutenção do software: Upgrades sem parar o sistema. • Requisitos de qualidade e fiabilidade: GPRS 99.995% de disponibilidade. • Tolerância a falhas de hardware e software: falhando um dos processadores do GPRS apenas baixa a capacidade do sistema.
  • 19. Sumário da experiência • Trauma inicial: “Para quê?” • “Ah, é parecido com prolog!” • Passagem da programação imperativa a funcional, pode “bloquear” alunos que encaram o Erlang como mais uma “linguagem normal”. • Realização de trabalho prático ajuda na compreensão da linguagem. • No final, reacção positiva por parte dos alunos. • Ajuda recebida dos docentes envolvidos. • Trabalho de projecto sobre o Eddie. • Usado na disciplina de AISC
  • 20. Trabalho futuro em OC • Trabalhos práticos mais complexos. • Uso mais aprofundado das facilidades do OTP. • Uso e implementação de protocolos de comunicação mais elaborados. • Interface com outras linguagens.
  • 21. Preconceitos iniciais dos alunos • “Se isso não é usado para que é que serve?” • “Para que é que temos de aprender outra linguagem?” • “Uma linguagem não chega para todos os tipos de programas?” • “Se no meu emprego trabalho na linguagem X, de que é que me serve isso?”
  • 22. Afinal o que é programar? • Resolver problemas decompondo-os em problemas mais simples. • Paradigmas da programação fornecem maneiras de estruturar a “fragmentação” dos problemas. • As linguagens são uma forma de “explicitar” os conceitos que possuímos. • Se o conceito não existir na linguagem teremos problemas em o expresssar.
  • 23. Vantagens das Linguagens Funcionais • Se as funções não possuem efeitos laterais então podem ser analisadas de uma forma independente do contexto. • Torna-se mais fácil a decomposição do problema/programa em funções. • Torna-se mais fácil a reutilização de código. • Torna-se mais fácil (ou possível) a análise formal do programa. • Torna-se mais fácil a utilização de funções como parâmetros de outras funções.
  • 24. Porque é que não são mais usadas? • A indústria não tem tempo para ser criativa, e a academia não é flexivel devido a restrições várias. • Trauma das teorias matemáticas normalmente associadas às linguagens funcionais. • Carga semântica extremamente forte de algumas linguagens funcionais. • Vistas mais como assunto de pesquisa do que como ferramentas práticas. • Falta de “ferramentas CASE”. • O debate sobre linguagens de programação assume muitas vezes contornos de “fanatismo religioso” onde se defende o que se conhece, contra a incerteza do que não se conhece.
  • 25. Problemas do mundo académico • Conservadorismo. • Psicose de “seguir as linguagens que a indústria quer”. • A indústria na realidade não quer pessoas que saibam a linguagem X. • A indústria quer pessoas que saibam programar, o que é algo muito diferente. • A indústria deseja pessoas que digam: “Esta linguagem não presta, existe uma muito melhor, que nos pode fazer ganhar muito mais dinheiro.”
  • 26. Problemas da indústria • Decisões estratégicas ao nível da tecnologia realizadas com o completo desconhecimento dos problemas em causa. • Escolha de candidatos a empregos baseada no número de palavras-chave que aparece no curriculum. • Medo da diferença.
  • 27. Conclusões • As linguagens funcionais podem ser ensinadas/aprendidas fácilmente, simplificando a escrita e compreensão de algoritmos avançados de manipulação de dados. • É recomendável que no curso seja dada uma maior visibilidade e utilização às linguagens funcionais. • Cada vez mais os programas são constítuídos por um grande número de processos que interagem entre si, e os paradigmas tradicionais de programação têm problemas de adaptação a estes novos modelos computacionais, enquanto que linguagens como o Erlang se adaptam de uma forma notável.