Conceitos Fundamentais de ERLANG – Parte 1 de 3 _ Elemar DEV

11
4/5/2014 Conceitos fundamentais de ERLANG – Parte 1 de 3 | Elemar DEV http://elemarjr.net/2011/08/07/conceitos-fundamentais-de-erlang-parte-1-de-3/ 1/11 E lemar DEV Tecnologia e desenvolvimento Conceitos fundamentais de ERLANG – Parte 1 de 3 Olá pessoal, como estamos!? Acho muito importante, para todo desenvolvedor de software, conhecer um pouco sobre muitas tecnologias. A ideia é conseguir “saber onde procurar” uma solução quando uma necessidade surge. Nesse post, pretendo apresentar alguns conceitos relacionados com a linguagem ERLANG. Entretanto, como seria impossível esgotar esse assunto em um único momento, resolvi fazer isso em três partes. Antes de continuar, talvez queira visitar o site oficial: http://www.erlang.org/ O que é ERLANG?! Comecemos pela definição disponível no site: Para mim, é uma linguagem estranha, com um nome estranho. Entretanto, incrivelmente poderosa. Quanto ao nome, há quem diga que o nome é um acrônimo para Ericsson Language (onde a linguagem surgiu), há quem diga que é uma homenagem ao matemático Agner Karup Erlang (com contribuições muito relevantes para a análise de redes telefônicas). Erlang foi projetada para concorrência Erlang is a programming language used to build massively scalable soft realtime systems with requirements on high availability. Some of its uses are in telecoms, banking, ecommerce, computer telephony and instant messaging. Erlang’s runtime system has builtin support for concurrency, distribution and fault tolerance.

Transcript of Conceitos Fundamentais de ERLANG – Parte 1 de 3 _ Elemar DEV

  • 4/5/2014 Conceitos fundamentais de ERLANG Parte 1 de 3 | Elemar DEV

    http://elemarjr.net/2011/08/07/conceitos-fundamentais-de-erlang-parte-1-de-3/ 1/11

    ElemarDEV

    Tecnologiaedesenvolvimento

    ConceitosfundamentaisdeERLANGParte1de3

    Olpessoal,comoestamos!?

    Achomuitoimportante,paratododesenvolvedordesoftware,conhecerumpoucosobremuitastecnologias.Aideiaconseguirsaberondeprocurarumasoluoquandoumanecessidadesurge.

    Nessepost,pretendoapresentaralgunsconceitosrelacionadoscomalinguagemERLANG.Entretanto,comoseriaimpossvelesgotaresseassuntoemumnicomomento,resolvifazerissoemtrspartes.

    Antesdecontinuar,talvezqueiravisitarositeoficial:http://www.erlang.org/

    OqueERLANG?!

    Comecemospeladefiniodisponvelnosite:

    Paramim,umalinguagemestranha,comumnomeestranho.Entretanto,incrivelmentepoderosa.

    Quantoaonome,hquemdigaqueonomeumacrnimoparaEricssonLanguage(ondealinguagemsurgiu),hquemdigaqueumahomenagemaomatemticoAgnerKarupErlang(comcontribuiesmuitorelevantesparaaanlisederedestelefnicas).

    Erlangfoiprojetadaparaconcorrncia

    Erlangisaprogramminglanguageusedtobuildmassivelyscalablesoftrealtimesystemswithrequirementsonhighavailability.Someofitsusesareintelecoms,banking,ecommerce,computertelephonyandinstantmessaging.Erlangsruntimesystemhasbuiltinsupportforconcurrency,distributionandfaulttolerance.

  • 4/5/2014 Conceitos fundamentais de ERLANG Parte 1 de 3 | Elemar DEV

    http://elemarjr.net/2011/08/07/conceitos-fundamentais-de-erlang-parte-1-de-3/ 2/11

    DizemqueaEricsson,aodesenvolverErlang,buscavaalgoprximoquetornassevivelodesenvolvimentodeaplicaes,quaserealtime,eextremamentetoleranteafalhas.

    Erlangeumalinguagemfuncional.

    NonecessrioderrubarcompletamenteumsistemafeitoemErlangparaatualizarmdulosinteiros.HaplicaesfeitasemErlangqueestofuncionandohdiversosanossemteremsidoparadasumanicavez.

    Erlangfuncionacomprocessolevesnolugardethreads.OscriadoresdeErlangdedicaramalgumtempoparafazercomquesuamquinavirtualtornassesimplesacriao,gestoecomunicaodeaplicaescommuitosprocessos.

    Erlangconfivel

    Erlangfacilitaomonitoramentodeprocessos.Assim,fcilidentificaramortedeumprocesso(eseusrelacionados),bemcomoiniciarnovos.

    Erlangfoiprojetadaparapermitirhotswappingeterprocessoslevesqueiniciamcomomnimodeoverhead.

    Atualmente,ErlangutilizadanodesenvolvimentodesistemascomooCouchDBeochatdoFacebook.

    Antesdecomearumpoucodeprogramaofuncional

    Erlangumalinguagemdiferente.Paraquemnotemqualquerexperinciadeprogramaofuncional,importanteentenderqueemErlang:

    programassoescritosinteiramentecomfunesgeralmente,todavezqueumafunoforevocadacomumdeterminadoconjuntodeparmetros,deverretornaromesmovalorgeralmente,funesnoalteramoestadodoprograma(nosideeffects)umavarivelpodereceberapenasumvalor.Soimutveis.

    Osgeralmenteestodestacadospornoseremcomunsnadescriodelinguagenspuramentefuncionais.Erlangnoumalinguagempuramentefuncional.

    Letitcrash!(MantraparaErlang)

  • 4/5/2014 Conceitos fundamentais de ERLANG Parte 1 de 3 | Elemar DEV

    http://elemarjr.net/2011/08/07/conceitos-fundamentais-de-erlang-parte-1-de-3/ 3/11

    ParainstalarErlang

    AntesdecomearatrabalharcomErlang,sernecessriofazerseudownload.Paraisso,acessehttp://www.erlang.org/download.html!

    Depois,sexecutarainstalao.

    Pronto!

    ExecutandooErlang

    TendoinstaladooErlang,podemoscomearabrincar.

    Paracomear,iniciemos,apartirdomenuinicialoREPLdoErlang.ChamaseERLANG

    Esseatalhoiniciaoutiltriowerl.

  • 4/5/2014 Conceitos fundamentais de ERLANG Parte 1 de 3 | Elemar DEV

    http://elemarjr.net/2011/08/07/conceitos-fundamentais-de-erlang-parte-1-de-3/ 4/11

    Tambmpodemosiniciarumaversoeconmica,noconsoledecomando,atravsdoutilitrioerl.Observe:

    Comentrios,listas,variveiseexpresses

    Comeamoscomomaissimples,comentrios!Observe:

  • 4/5/2014 Conceitos fundamentais de ERLANG Parte 1 de 3 | Elemar DEV

    http://elemarjr.net/2011/08/07/conceitos-fundamentais-de-erlang-parte-1-de-3/ 5/11

    Todososcomentriosdevemserprecididospor%.

    Agora,umpoucodeoperaesmatemticas:

    Umpontoimportanteaobservar:todasentenaemErlangdeveserencerrada,obrigatoriamente,comumponto(.)

    Stringsdevemestarsempreentreaspas.Listasdevemestarentrecolchetes.Stringssolistasdecaracteres(cdigosascii).Observe:

  • 4/5/2014 Conceitos fundamentais de ERLANG Parte 1 de 3 | Elemar DEV

    http://elemarjr.net/2011/08/07/conceitos-fundamentais-de-erlang-parte-1-de-3/ 6/11

    Nomesdevariveissemprecomeamcommaisculas(amensagemdeerrodoREPLbemruinzinha)eelassoimutveis:

    Atoms

    AtomcomochamamossmbolosemErlang.Elessoidentificadoresesemprecomeamcomumcaractereminsculo.Observe:

  • 4/5/2014 Conceitos fundamentais de ERLANG Parte 1 de 3 | Elemar DEV

    http://elemarjr.net/2011/08/07/conceitos-fundamentais-de-erlang-parte-1-de-3/ 7/11

    TuplasePatternmatching

    EmErlang,tuplassocriadasdeformasimilaralistas.Entretanto,nolugardecolchetes,usamoschaves.Comtuplas,podemostrabalharcompatternmatching.Observe:

    Graasaimutabilidade,podemosatribuirvaloresavariveiscomfacilidade.Basstahavercoerncia.

  • 4/5/2014 Conceitos fundamentais de ERLANG Parte 1 de 3 | Elemar DEV

    http://elemarjr.net/2011/08/07/conceitos-fundamentais-de-erlang-parte-1-de-3/ 8/11

    UmpoucomaissobrePatternMatching

    PodemosutilizarPatternmatchingemtodasaslistasdoErlang.Observe:

    PrimeirasfunesemErlang

    Paraescrevermosumafuno,precisamoscolocarocdigofonteemumarquivo.Essearquivodeveteraextenso.erl

    Vamoscomearcomumarquivochamadodemo.erl:

    Vamosentenderessecdigo:

    aprimeiralinhadnomeaomdulo.Todafunosempredeveestarassociadaaummdulo(chamadodemo,nesseexemplo)asegundalinhaindicaumafunoquedesejamosutilizarforadomduloo/1indicaqueafunoaceitaumparmetro

    1234

    -module(demo).-export([echo/1]). echo(Any) -> Any.

  • 4/5/2014 Conceitos fundamentais de ERLANG Parte 1 de 3 | Elemar DEV

    http://elemarjr.net/2011/08/07/conceitos-fundamentais-de-erlang-parte-1-de-3/ 9/11

    aterceiralinha(comcdigo)temadefiniodafuno.

    IMPORTANTE:Onomedomdulodeveserigualaonomedoarquivo.

    Paracompilarafuno,usamosoutilitrioerlc.Observe:

    Comoindicado,apsacompilaogeradoumarquivocomaextenso.beam

    Paracarregaromdulo,usamosc().Observe:

    Reparequeparaevocarumafuno,utilizamosasintaxe::().

    Outroexemplo:fibonacci.

  • 4/5/2014 Conceitos fundamentais de ERLANG Parte 1 de 3 | Elemar DEV

    http://elemarjr.net/2011/08/07/conceitos-fundamentais-de-erlang-parte-1-de-3/ 10/11

    Reparequeutilizamosparatrabalharaspartesdafuno.Voltaremosaissoembreve.

    Lindo!

    Porhoje,eraisso!

    4comentriosemConceitosfundamentaisdeERLANGParte1de3

    AlbertoMonteiro07/08/2011

    0

    0

    123456

    -module(math).-export([fibonacci/1]). fibonacci(0) -> 1;fibonacci(1) -> 1;fibonacci(N) -> fibonacci(N-1)+fibonacci(N-2).

  • 4/5/2014 Conceitos fundamentais de ERLANG Parte 1 de 3 | Elemar DEV

    http://elemarjr.net/2011/08/07/conceitos-fundamentais-de-erlang-parte-1-de-3/ 11/11

    iRateThis

    Nocasoquandovocfezafunofibonaccioserverparadizerqueaquelafunoaindacontinua,eo.finalizaafuno?

    Responderelemarjr07/08/2011

    1

    0

    iRateThis

    Naverdade,emErlang,assumesequeoindicaquehoutrassobrecargas(simplificando),opontofinal,encerraainstruo.

    ResponderAlbertoMonteiro08/08/2011

    0

    0

    iRateThis

    Eudeiumalidasobrealinguagemeviqueemloopsasinstruessoseparadaspor,aoinvezde

    ResponderPingback:ConceitosfundamentaisdeERLANGParte2de3ElemarDEV

    Publicados07/08/2011porelemarjremSemcategoriaemarcadoErlang.http://wp.me/pZuNgjDPostanteriorPostseguinteBlognoWordPress.com.OtemaSuburbia.