Índice

Dizem por ai que todo interessado em ciência da computação deveria aprender pelo menos uma nova linguagem por ano. Eu sinceramente não sei em quê isso é baseado, porém gosto da idéia e resolvi adotar essa filosofia. Eis então que escolhi Erlang como a minha linguagem de aprendizado do ano.

Pretendo através deste blog, postar as minhas experiências com essa nova linguagem, e tentar transmitir um pouco do meu aprendizado. Espero que essa série de postagens formem um círculo de aprendizado, pois da mesma forma que tento transmitir o meu aprendizado, também estou aqui para aprender. Todos comentários construtivos, em forma de contribuição, ou não, serão bem-vindos.

O que é Erlang?

Erlang é uma linguagem de programação de uso geral e um sistema para execução. Foi desenvolvida pela Ericsson para suportar aplicações distribuídas e tolerantes a falhas a serem executadas em um ambiente de tempo real e interrupto. Ela suporta nativamente hot swapping, de forma que o código pode ser modificado sem a parada do sistema. Originalmente era uma linguagem proprietária da Ericsson, mas foi lançada em código aberto em 1998.

Fonte: Wikipédia

Por que Erlang?

Já ouviu aquela história que ler de cabeça para baixo, ou escrever com a mão oposta à que você esta acostumado estimula a nossa inteligência? Pode ser considerado como um dos motivos. Erlang me chamou a atenção por ser uma linguagem de programação quase que puramente funcional, o que diferencia muito com o que eu já estou acostumado a desenvolver: Orientação a Objetos.

Além de tudo, Erlang é utilizada em grandes centros, principalmente na área de telefonia, e sempre em ambientes que necessitam de robustez.

Entre algumas das empresas que utilizam Erlang estão a Ericsson, Nortel, T-Mobile, Amazon, Yahoo e Facebook (Chat).

Capítulo I – Introdução

I. O que é uma linguagem funcional?

A Programação Funcional como esta no nome, se baseia na Lei da Função (Matemática). Mas não é só isso. Na programação puramente funcional são evitados que os estados e dados sejam mutáveis.

Por exemplo, em uma programação estritamente funcional, não há alocação explícita de memória, nem declaração explícita de variáveis. No entanto, essas operações podem ocorrer automaticamente quando a função é invocada; a alocação de memória ocorre para criar espaço para os parâmetros e para o valor de retorno, e a declaração ocorre para copiar os parâmetros dentro deste espaço recém-alocado e para copiar o valor de retorno de volta para dentro da função que a chama.

Fonte: Wikipédia

Como visto acima, a Programação Funcional se baseia mesmo em funções. Um bom exemplo são os laços comumente utilizados na Programação Imperativa (C, por exemplo), que na Programação Funcional são representados por funções recursivas, como poderemos analisar com os exemplos abaixo:

Exemplo de Programação Imperativa: Código em C.

int n = 10;
while (n > 0)
{
	printf("%d\n", n);
	n--;
}

Mesmo exemplo, só que em Programação Funcional: Código em Erlang.

test(0) ->
	ok;

test(N) ->
	io:format("~B~n", [N]),
	test(N - 1).
test(10).

Podemos ver no exemplo em Erlang que não há nenhuma atribuição de variável, o laço é feito através de funções recursivas. O laço produzido na Programação Imperativa (Código em C) não deixa de ser uma forma de recursividade, é chamada de Recursividade Reversa.

Recursividade em programação funcional pode assumir várias formas e é em geral uma técnica mais poderosa que o uso de laços. Por essa razão, quase todas as linguagens imperativas também a suportam (sendo Fortran 77 e COBOL exceções notáveis).

Fonte: Wikipédia

Se você não entendeu o código Erlang, não se preocupe, explicarei-o mais adiante. Conforme o andamento das postagens, é legal que todos procurem sempre olhar as postagens anteriores. É uma forma de se entender melhor, pois nem sempre esta no momento de explicar cada trecho do código.

II. Programação Distribuída e Orientação a Concorrência

Uma das grandes vantagens de Erlang é o suporte a concorrência. Erlang foi projetada para suportar aplicações distribuídas, ou seja, aplicações que necessitam de processos concorrentes que comuniquem entre si, formando assim uma rede distribuída de processos.

Esses processos se comunicam de forma assíncrona, cada um desses processos tem uma fila de mensagens a ler. As mensagens transmitidas entre os processos podem conter qualquer tipo de dado Erlang.

Conclusão

Bom, até aqui só mostrei algumas coisas na teoria, mostrei sobre Programação Funcional, Programação Distribuída e Orientação a Concorrência. Bem uma introdução mesmo, pesado para quem quer colocar logo a “mão na massa”.

Mas na próxima postagem mostrarei melhor a estrutura da linguagem e os tipos de dados utilizados.

Este documento esta sob licença GFDL – GNU Free Documentation License. Saiba mais.