Contexto
- Erlang é uma linguagem desenvolvida para construir sistemas distribuídos confiáveis; começou inicialmente como uma biblioteca de Prolog e evoluiu para uma linguagem independente.
- Foi usada na Ericsson para programar centrais telefônicas e, em 1998, tornou-se open source.
- Joe Armstrong foi um dos principais projetistas do Erlang, e sua tese de doutorado tratava de como criar sistemas distribuídos confiáveis na presença de falhas de software.
Behaviours
- Os behaviours do Erlang são semelhantes a interfaces em Java ou Go e consistem em um conjunto de assinaturas de tipo que pode ter várias implementações.
- Com behaviours, basta escrever apenas o código que define a lógica de negócio do programa, enquanto o código de infraestrutura é fornecido automaticamente.
- Os behaviours são escritos por especialistas e se baseiam em melhores práticas.
Behaviour de servidor genérico
gen_server é explicado com o exemplo de implementação de um armazenamento chave-valor.
handle_call é responsável por atualizar o estado ou consultar uma chave, e toda a concorrência fica oculta dentro do componente gen_server.
Behaviour de gerenciador de eventos
gen_event é um gerenciador de eventos que registra manipuladores de eventos e os executa quando uma mensagem chega.
- É útil para registro de erros, e é fornecido um exemplo simples de logger.
Behaviour de máquina de estados
gen_fsm teve seu nome alterado para gen_statem e é adequado para implementar protocolos.
Behaviour de supervisor
- O supervisor verifica se outros processos estão funcionando corretamente e, em caso de falha, os reinicia de acordo com uma estratégia predefinida.
- A estratégia
one_for_one reinicia apenas o processo que falhou, enquanto a estratégia one_for_all reinicia todos os filhos quando um único processo falha.
Behaviours de aplicação e release
- Uma aplicação inclui a árvore de supervisão e tudo o que for necessário, enquanto um release empacota uma ou mais aplicações.
- Deve ser possível fazer rollback em caso de falha na atualização.
Implementação de behaviours
- Mais do que os processos leves e a passagem de mensagens do Erlang, é a estrutura dos behaviours que leva a software confiável.
- Para implementar behaviours em outras linguagens, é possível começar usando assinaturas de interface.
Correção dos behaviours
- Testes de simulação facilitam o teste de sistemas distribuídos, e a estrutura do behaviour
gen_server pode simplificar a resolução de problemas.
Contribuição
- Há ideias como aproveitar o trabalho de Martin Thompson para criar um event loop rápido e adicionar I/O assíncrona.
- Se você tiver interesse, opiniões, sugestões ou perguntas, é possível entrar em contato.
1 comentários
Comentários no Hacker News
O impressionante no Erlang e no BEAM é a profundidade de suas funcionalidades. Para o OP, o maior ganho foi a Behavior/Interface do Erlang. Pessoalmente, acho importante que os recursos de desenvolvimento necessários para construir sistemas complexos sejam muito menores do que em outras linguagens. Para muita gente, os processos leves e o modelo de programação são o grande atrativo
eido Erlang, é possível compilar nós em C e fazer interface com outros nós Erlang. Por meio da bibliotecarpcdo Erlang, é possível fazer chamadas de função em C e interagir com aplicações ElixirTrabalhei com algumas pessoas, inclusive gestores, que queriam escrever livros com base na própria experiência. Sempre discordávamos sobre os fatores do sucesso. Algumas pessoas afirmam que processos leves e passagem de mensagens não são o ingrediente secreto, mas deixam passar que o Communicating Sequential Processes do Erlang é inseparável dessas características
Voltei a me interessar por Erlang por causa dos processos leves e da passagem de mensagens. Até agora, os behaviors eram algo secundário
Eu estava procurando informações sobre por que a Ericsson deixou de usar Erlang e sobre a demissão do Joe
A força do Erlang/Elixir não está na implementação do modelo Actor, no matching do Prolog, na imutabilidade ou nos behaviors, mas no desejo do Joe de mostrar que é possível fazer mais com menos recursos
Erlang, OTP e BEAM oferecem muito mais do que behaviors. A VM se parece com um kernel virtual, oferecendo supervisores, processos isolados e modo distribuído. O OTP oferece módulos úteis como Mnesia (banco de dados), contadores atômicos/tabelas ETS (cache) etc.
O conceito mais interessante em Erlang/BEAM é que a recuperação parcial já vem embutida por padrão. Quando surge um estado inesperado, em vez de encerrar o processo inteiro ou correr o risco de causar corrupção, faz-se rollback para um estado conhecido e bom no nível mais granular possível
O motivo pelo qual a estrutura de behaviors do Erlang não é copiada por outras linguagens e por designers de bibliotecas é que as assinaturas das funções dos behaviors em Erlang estão intimamente ligadas a outras características da linguagem, especialmente seu uso peculiar de imutabilidade
Não concordo com o conteúdo deste texto. Os behaviors são possíveis graças à arquitetura básica do sistema. Behaviors não são interfaces, mas algo mais parecido com objetos abstratos em linguagens como Java
Behaviors não são tão interessantes. Eles existem em outras linguagens de programação também. O interessante no BEAM é que lançar erros é algo feito de forma muito elegante. A combinação entre lançar erros e o poder dos behaviors facilita capturar erros, relatar informações de contexto e, em geral, compor tudo isso de maneira flexível