Índice
- Parte I – Introdução
- Parte II – Introdução (continuação)
- Parte III – Estrutura: Tipos de Dados
- Parte IV – Shell
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.
[...] por Caio Ariede (caio·ariedeΘgmail·com) – referência [...]
ótimo texto… realmente erlang é muito interessante!!!
Faaaala rapaz! Parabéns pelo post!
Pra quem é visitante, uma dica…
Há também algo sobre programação funcional aqui:
http://leandrosilva.com.br/2008/11/03/sim-programacao-funcional-e-relevante-hoje
(Jabáááá!)
Apoio a iniciativa! vou acompanhar a série tb =]
A história de uma linguagem por ano só vale a pena se a linguagem que você for aprender te ensinar uma nova maneira de pensar.
Bons exemplos: Erlang, Haskell, C++, Fortress, Epigram, Lisp, Qi II, Ruby, Nermele…
Nem tanto: Java e C#
[...] Wordpress Posts RecentesAprendendo Erlang – Parte I [...]
[...] Aprendendo Erlang – Parte I — caioariede.com weblog em Aprendendo Erlang – Parte IIIAprendendo Erlang – Parte I — caioariede.com [...]
[...] que citei no início que estão realmente repletos de material interessante, queria indicar também uma série de posts do Caio Ariede, que também está aprendendo a fantástica [...]
[...] por Caio Ariede (caio·ariedeΘgmail·com) – referência [...]
[...] Parte I – Introdução [...]
cara, não para esse blog
sensacional
põe mais exemplos
bora discutir sobre erlaaaaaaaaaaaaaaaaang
please
Ótimo post, tenho muita vontade de aprender Erlang e outras linguagens funcionais, mas até botar um nix aqui fica dificil.