A linguagem de programação Erlang - dei.isep.ipp.pt paf/papers/  · A linguagem de programação…

  • View
    212

  • Download
    0

Embed Size (px)

Transcript

A linguagem de programao Erlang

Paulo Ferreira paf(a)dei.isep.ipp.ptJornadas Cientficas do ISEP

9 de Maio de 2001

Como ensinar programao concorrente edistribuda?

Alunos sem experincia de trabalho com processos (1 ano de funcionamentoda licenciatura).

Ausncia de sistemas paralelos. Inexistncia de verbas. Foco na robustez e elegncia e no 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 paraconcorrncia, distribuio e tolerncia a falhas.

OTP (Open Telecom Platform) uma plataforma de desenvolvimento desistemas de telecomunicaes.

constituda por um sistema runtime, um conjunto de componentes escritosprincipalmente em Erlang, e um conjunto de princpios de design deprogramas.

Normalmente usado o conjunto.

O que uma linguagem funcional?

No se mudam os valores das variveis. As funes no possuem efeitos laterais. Exemplo de efeito lateral: variveis globais. Sem efeitos laterais: puramente funcional. Sem efeitos laterais: mais fcil analizar um programa do ponto de vista

matemtico. Sem efeitos laterais: Cada funo pode ser analizada independentemente do

ambiente. O Erlang no uma linguagem puramente funcional (I/O e comunicao).

Funes como caixas negras

Para um determinado valor de entrada, a sada sempre a mesma. Podemos esquecer o seu interior. Temos os software ICs, componentes modulares que so independentes entre

si.

Histria do Erlang

Pesquisa nos laboratrios Ericsson Que linguagem usar para desenvolver fcilmente sistemas robustos e fiveis? Experincias com vrias linguagens Desenvolvimento interno do Erlang 1987 -Erlang Primitivo 1998 - Lanamento em Open Source

Exemplo de programa

-module(mathlib).

-export([factorial/1]).

factorial(1)->1;

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

Chamada da funo: mathlib:factorial(5)

uma linguagem declarativa, com influncia do Prolog na sintaxe, mas noexiste mecanismo de backtracking.

O facto de ser declarativa confere-lhe uma grande expressividade. No existe declarao do tipo de dados, e a gesto de memria automtica.

Tipos de dados

Nmeros: Inteiros e Floats tomos Tuplos Listas Pids (Process Ids) Ports (canais de comunicao com programas escritos noutras linguagens) Referncias (objectos nicos ao nvel de vrios ns) Binrios (para manipulao 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 podemosetiquetaros tuplos com tomos, para que tudo fique mais claro.

sort([Pivot|T]) ->

sort([ X || X [].

Mais um exemplo

-define(PROTO1,22).

-define(PROTO2,33).

-define(PROTO3,1256).

%% Tratar um pacote segundo o protocolo certo

tratar(

Processos e mensagens

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

Pid ! Mensagem

receive

Mensagem1 -> aco1;

Mensagem2 -> aco2;

after Timeout -> aco_timeout

end

A comunicao feita atravs de mensagens, cujo envio tem sempre sucesso.

Exemplo de um servidor

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

init(...) ->,

loop(...).

loop(...) -> receive

stop -> true;

Pattern1 -> , loop(...);

...

PatternN ->, loop(...)

end.

Mais facilidades para processos

Mensagens de aviso quando um processo ligado termina. Todas as excepes so locais. Isto permite a constituio de uma hierarquia de processos para uma maior

robustez. Processos podem ser registados com um nome sendo acedidos atravs do

nome. Upgrade do cdigo sem parar o processo.

Distribuio

Arrancar os ns 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 funo recursiva que se chama a si prpria. Como existe LCO a funo corre num espao constante. Isto verdadeiro para funes que terminam com uma chamada a si prprias,

sem clculos pendentes.

Bibliotecas e interfaces existentes (exemplos)

Compilador, kernel e biblioteca standard Handler para eventos e alarmes, SNMP, medidor de avaliao. ASN1, interfaces de baixo nvel 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. Servios CORBA e compilador IDL. Ferramentas de debugging e monitorizao.

Exemplos prtico 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)

Caractersticas validadas na prtica

Grande nmero de processos por n - 4000 no AXD301). Soft RealTime - Custo das chamadas. Sistemas distribudos- A verso de 40 Gbits do AXD301 tem 72 processadores. Comunicao 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. Operao contnua: Mobility Server (1994) com 400 produtos. Manuteno do software: Upgrades sem parar o sistema. Requisitos de qualidade e fiabilidade: GPRS 99.995% de disponibilidade. Tolerncia a falhas de hardware e software: falhando um dos processadores do

GPRS apenas baixa a capacidade do sistema.

Sumrio da experincia

Trauma inicial: Para qu? Ah, parecido com prolog! Passagem da programao imperativa a funcional, pode bloquear alunos que

encaram o Erlang como mais uma linguagem normal. Realizao de trabalho prtico ajuda na compreenso da linguagem. No final, reaco 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 prticos mais complexos. Uso mais aprofundado das facilidades do OTP. Uso e implementao de protocolos de comunicao mais elaborados. Interface com outras linguagens.

Preconceitos iniciais dos alunos

Se isso no usado para que que serve? Para que que temos de aprender outra linguagem? Uma linguagem no 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 programao fornecem maneiras de estruturar a

fragmentao dos problemas. As linguagens so uma forma de explicitar os conceitos que possumos. Se o conceito no existir na linguagem teremos problemas em o expresssar.

Vantagens das Linguagens Funcionais

Se as funes no possuem efeitos laterais ento podem ser analisadas de umaforma independente do contexto.

Torna-se mais fcil a decomposio do problema/programa em funes. Torna-se mais fcil a reutilizao de cdigo. Torna-se mais fcil (ou possvel) a anlise formal do programa. Torna-se mais fcil a utilizao de funes como parmetros de outras funes.

Porque que no so mais usadas?

A indstria no tem tempo para ser criativa, e a academia no flexivel devidoa restries vrias.

Trauma das teorias matemticas normalmente associadas s linguagensfuncionais.

Carga semntica extremamente forte de algumas linguagens funcionais. Vistas mais como assunto de pesquisa do que como ferramentas prticas. Falta de ferramentas CASE. O debate sobre linguagens de programao assume muitas vezes contornos de

fanatismo religioso onde se defende o que se conhece, contra a incerteza doque no se conhece.

Problemas do mundo acadmico

Conservadorismo. Psicose de seguir as linguagens que a indstria quer. A indstria na realidade no quer pessoas que saibam a linguagem X. A indstria quer pessoas que saibam programar, o que algo muito diferente. A indstria deseja pessoas que digam: Esta linguagem no presta, existe uma

muito melhor, que nos pode fazer ganhar muito mais dinheiro.

Problemas da indstria

Decises estratgicas ao nvel da tecnologia realizadas com o completodesconhecimento dos problemas em causa.

Escolha de candidatos a empregos baseada no nmero de palavras-chave queaparece no curriculum.

Medo da diferena.

Concluses

As linguagens funcionais podem ser ensinadas/aprendidas fcilmente,simplificando a escrita e compreenso de algoritmos avanados demanipulao de dados.

recomendvel que no curso seja dada uma maior visibilidade e utilizao slinguagens funcionais.

Cada vez mais os programas so consttudos por um grande nmero deprocessos que interagem entre si, e os paradigmas tradicionais de programaotm problemas de adaptao a estes novos modelos computacionais, enquantoque linguagens como o Erlang se adaptam de uma forma notvel.