Ícone do site Insights BRQ

Linguagem Elixir – Uma breve introdução

Nesse artigo vamos falar sobre a linguagem Elixir e abordar conceitos de programação funcional.

O que é o Elixir?

Elixir é uma linguagem de programação funcional lançada em 2011. Idealizada e desenvolvida por José Valim dentro da empresa Plataformatec.

Conceitos de programação funcional

Antes de entrarmos nas funcionalidades da linguagem, vamos abordar alguns conceitos de programação funcional.

Segundo Eric Elliott:

Programação funcional é o processo de construir software através de composição de funções puras, evitando compartilhamento de estados, dados mutáveis e efeitos colaterais.

O paradigma funcional surgiu para auxiliar na resolução de problemas complexos. Os matemáticos encontraram nas funções a forma de chegar no objetivo final.

Os conceitos

Erlang, OTP e tolerância a falhas

Erlang

Erlang é uma linguagem de programação usada para construir sistemas real-time, massivamente escaláveis ​e ​com requisitos de alta disponibilidade.
Alguns de seus usos são em telecomunicações, bancos, comércio eletrônico, telefonia por computador e mensagens instantâneas (WhatsApp e Facebook Messenger).
O runtime do Erlang tem suporte embutido para simultaneidade, distribuição e tolerância a falhas.
Veja alguns casos interessantes do WhatsApp:
WhatsApp Blog – 2 milhões de conexões TCP
WhatsApp tem 50 engenheiros para 900 milhões de usuários

OTP

OTP é um conjunto de bibliotecas Erlang e princípios de design que fornecem middleware para desenvolver esses sistemas. Inclui seu próprio banco de dados distribuído, aplicativos para interface com outras linguagens, ferramentas de depuração e manipulação de lançamentos.

BEAM

BEAM é a máquina virtual no núcleo da plataforma Erlang Open Telecom. O BEAM faz parte do Erlang Run-Time System, que compila o código-fonte Erlang em bytecode, que é então executado no BEAM. Os arquivos de bytecode BEAM têm a extensão de arquivo .beam

Scheduler

A instância BEAM é iniciada em um único processo do SO (você pode procurá-la pelo nome beam). Para cada CPU disponível, ele cria um thread. Isso torna os sistemas Erlang escaláveis ​​porque podem aproveitar todos os núcleos disponíveis.

Como parte do ERTS, o BEAM é responsável por escalonar os processos Erlang. Um único thread executa exatamente um escalonador que é, entre os outros, responsável por preencher a fila de processos Erlang. O escalonador também extrai processos Erlang da fila e aloca um intervalo de tempo para executar cada um deles.

Actor Model

O Actor Model é um modelo/conceito matemático de computação concorrente que trata os atores como a primitiva fundamental e universal da computação concorrente.

O ERTS sobre o qual o Elixir se baseia implementa o modelo de ator usando processos como atores que são leves e rápidos para criar e encerrar.

Os atores, neste modelo, podem ter as seguintes propriedades, entre outras, dependendo de seu design:

Funcionalidades da Linguagem

Performance

Para demonstrar a performance do Elixir, vou utilizar um exemplo retirado do artigo Elixir: 10 motivos para aprender.

Elixir 10k requisições

Node 10k requisições

Mais informações sobre performance em Elixir:
2 milhões de conexões websocket no Phoenix
Como o Discord escalou o Elixir para 5M de usuários concorrentes

Produtividade

Além da performance, existe um framework que nos dá um grande aumento da produtividade. O nome é Phoenix Framework.
Com o Phoenix Framework, você consegue prototipar uma aplicação de forma muito rápida.
Para criar um projeto via CLI basta fazer:

mix phx.new <nome_projeto>

Sintaxe

Alguns pontos sobre a sintaxe da linguagem:

Exemplo com pipe

def perform(notification) do
    notification |> get_client |> get_remote_chats |> insert_or_update_local_chats

    :ok
  end

Exemplo sem pipe

def perform(notification) do
    insert_or_update_local_chats(get_remote_chats(get_client(notification)))

    :ok
  end

Documentação

Para a documentação, existe uma ferramenta chamada HexDocs.
Para gerar uma página de documentação, basta adicionar alguns comentários “marcando” as funções e módulos e rodar um pequeno comando:

Macros e metaprogramação

Em Elixir, macros permitem uma extensão da linguagem. Ou seja, você pode criar código que escreve código em tempo de compilação.

Cases

Conheça algumas das empresas que usam Elixir: acesse a lista completa.

Documentário

Há um documentário no YouTube sobre a linguagem:

Aprendizado

Alguns sites para aprender Elixir:

Fontes:

João Paulo de Castro Lima – Analista de Sistemas na BRQ

Sair da versão mobile