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.
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
Esse atalho inicia o utiltário werl.
Também podemos iniciar uma versão “econômica”, no console de comando, através do utilitário erl. Observe:
Comentários, listas, variáveis e expressões
Começamos com o mais simples, comentários! Observe:
Todos os comentários devem ser precididos por “%”.
Agora, um pouco de operações matemáticas:
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:
Nomes de variáveis sempre começam com maiúsculas (a mensagem de erro do REPL é bem ruinzinha) e elas são imutáveis:
Atoms
Atom é como chamamos símbolos em Erlang. Eles são identificadores e sempre começam com um caractere minúsculo. Observe:
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:
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:
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:
Como indicado, após a compilação é gerado um arquivo com a extensão .beam
Para carregar o módulo, usamos c(
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.
Lindo!
Por hoje, era isso!
Alberto Monteiro
07/08/2011
No caso quando você fez a função fibonacci o ; server para dizer que aquela função ainda continua, e o . finaliza a função?
elemarjr
07/08/2011
Na verdade, em Erlang, assume-se que o ; indica que há outras “sobrecargas” (simplificando), o ponto-final, encerra a instrução.
Alberto Monteiro
08/08/2011
Eu dei uma lida sobre a linguagem e vi que em loops as instruções são separadas por , ao invez de ;