Conceitos fundamentais de ERLANG – Parte 1 de 3

Posted on 07/08/2011

4


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:

Erlang is a programming language used to build massively scalable soft real-time systems with requirements on high availability. Some of its uses are in telecoms, banking, e-commerce, computer telephony and instant messaging. Erlang’s runtime system has built-in support for concurrency, distribution and fault tolerance.

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

Dizem que a Ericsson, ao desenvolver Erlang, buscava algo próximo que tornasse viável o desenvolvimento de aplicações, quase real-time, e extremamente tolerante a falhas.

Erlange é uma linguagem funcional.

Não é necessário “derrubar” completamente um sistema feito em Erlang para atualizar módulos inteiros. Há aplicações feitas em Erlang  que estão funcionando há diversos anos sem terem sido “paradas” uma única vez.

Erlang funciona com “processo leves” no lugar de threads. Os criadores de Erlang dedicaram algum tempo para fazer com que sua máquina virtual tornasse simples a criação, gestão e comunicação de aplicações com muitos processos.

Erlang é confiável

Let it crash! (Mantra para Erlang)

Erlang facilita o monitoramento de processos. Assim, é fácil identificar a morte de um processo (e seus relacionados), bem como iniciar novos.

Erlang foi projetada para permitir hot-swapping e ter processos leves que iniciam com o mínimo de overhead.

Atualmente, Erlang é utilizada no desenvolvimento de sistemas como o CouchDB e o chat do Facebook.

Antes de começar … um pouco de programação funcional

Erlang é uma linguagem diferente. Para quem não tem qualquer experiência de programação funcional, é importante entender que em Erlang:

  • programas são escritos inteiramente com funções;
  • geralmente, toda vez que uma função for evocada com um determinado conjunto de parâmetros, deverá retornar o mesmo valor;
  • geralmente, funções não alteram o estado do programa (no side effects)
  • uma “variável” pode receber apenas um valor. São imutáveis.

Os “geralmente” estão destacados por não serem comuns na descrição de linguagens puramente funcionais. Erlang não é uma linguagem puramente funcional.

Para instalar Erlang

Antes de começar a trabalhar com Erlang, será necessário fazer seu download. Para isso, acesse http://www.erlang.org/download.html!

Depois, é só executar a instalação.

image

Pronto!

Executando o Erlang

Tendo instalado o Erlang, podemos começar a brincar.

Para começar, iniciemos, a partir do menu inicial o REPL do Erlang. Chama-se… ERLANG Smiley de boca aberta

Esse atalho inicia o utiltário werl.

image

 

Também podemos iniciar uma versão “econômica”, no console de comando, através do utilitário erl. Observe:

image

 

Comentários, listas, variáveis e expressões

Começamos com o mais simples, comentários! Observe:

image

 

Todos os comentários devem ser precididos por “%”.

Agora, um pouco de operações matemáticas:

image

 

Um ponto importante a observar: toda sentença em Erlang deve ser encerrada, obrigatoriamente, com um ponto (.)

Strings devem estar sempre entre aspas. Listas devem estar entre colchetes. Strings são listas de caracteres (códigos ascii). Observe:

image

Nomes de variáveis sempre começam com maiúsculas (a mensagem de erro do REPL é bem ruinzinha) e elas são imutáveis:

image

Atoms

Atom é como chamamos símbolos em Erlang. Eles são identificadores e sempre começam com um caractere minúsculo. Observe:

image

 

Tuplas e Pattern matching

Em Erlang, tuplas são criadas de forma similar a listas. Entretanto, no lugar de colchetes, usamos chaves. Com tuplas, podemos trabalhar com pattern matching. Observe:

image

Graças a imutabilidade, podemos atribuir valores a variáveis com facilidade. Bassta haver coerência.

Um pouco mais sobre Pattern Matching…

Podemos utilizar Pattern matching em todas as listas do Erlang. Observe:

image

 

Primeiras funções em Erlang

Para escrevermos uma função, precisamos colocar o código fonte em um arquivo. Esse arquivo deve ter a extensão .erl

Vamos começar com um arquivo chamado demo.erl:


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

echo(Any) -> Any.

            

Vamos entender esse código:

  • a primeira linha dá nome ao módulo. Toda função sempre deve estar associada a um módulo (chamado demo, nesse exemplo);
  • a segunda linha indica uma função que desejamos utilizar fora do módulo;
  • o /1 indica que a função aceita um parâmetro;
  • a terceira linha (com código) tem a definição da função.

IMPORTANTE: O nome do módulo deve ser igual ao nome do arquivo.

Para compilar a função, usamos o utilitário erlc. Observe:

image

Como indicado, após a compilação é gerado um arquivo com a extensão .beam

Para carregar o módulo, usamos c(). Observe:

image

 

Repare que para evocar uma função, utilizamos a sintaxe: : ().

Outro exemplo: fibonacci.


              
-module(math).
-export([fibonacci/1]).

fibonacci(0) -> 1;
fibonacci(1) -> 1;
fibonacci(N) -> fibonacci(N-1)+fibonacci(N-2).

            

Repare que utilizamos ; para trabalhar as “partes” da função. Voltaremos a isso em breve.

image

Lindo!

Por hoje, era isso!

Smiley piscando

Etiquetado:Erlang
Posted in: Sem categoria