Linguagem Elixir
Published: 2021-12-09 17:45:32

Linguagem de Programação Elixir?
Elixir é uma linguagem de programação funcional executada na máquina virtual do Erlang. Para quem não sabe, o Erlang foi desenvolvido pela Ericsson, empresa conhecida pelos celulares super modernos da década 2000.
Mas, ao contrário do que muitas pessoas pensam, ela não está obsoleta, tanto que é a linguagem utilizada por um dos aplicativos mais utilizados no mundo: o WhatsApp!
Voltando ao Elixir, sua origem é brasileira, mas já é conhecido e utilizado por desenvolvedores em todo o mundo. O seu diferencial é o fato do seu código ser executado através de processos isolados, o que aumenta a eficiência no uso de recursos disponíveis pelas máquinas.
Conheça mais sobre o Elixir, uma linguagem criada para facilitar seus processos e elevar a produtividade das equipes. Boa leitura!
Qual a origem do Elixir?
O Elixir foi lançado em 2012 e criado por José Valim, através de um projeto da empresa de consultoria de software Plataformatec. Seu código é executado através de processos isolados, que trocam informações por meio de mensagens.
Esse isolamento dos processos permite que eles sejam coletados de forma independente, reduzindo as pausas e, consequentemente, utilizando todos os recursos da máquina com máxima eficiência. Os processos, ainda, se comunicam entre máquinas diferentes na mesma rede.
O seu criador já havia se destacado no cenário do desenvolvimento e, na época, participava do Rails Core Team, grupo responsável pelo desenvolvimento do Ruby on Rails. Este é um framework livre que aumenta a velocidade e facilita o desenvolvimento de sites orientados a banco de dados. Uma vez que permite criar aplicações com base em estruturas pré-definidas.
José Valim e sua equipe já estavam trabalhando na melhoria da performance do Rails, principalmente buscando soluções para trabalhar com sistema Multicores ainda mais potentes. Com o tempo, porém, percebeu que a melhor solução seria optar por uma outra linguagem. E foi assim que a Erlang entrou na história.
Os especialistas perceberam que trabalhar com a Erlang solucionava muitos dos problemas notados no Ruby on Rail, principalmente aqueles relacionados à computação distribuída. Entretanto, por outro lado, ela deixava a desejar em alguns outros pontos.
Por conta disso, foi criado o Elixir, linguagem executada através da Erlang VM, uma máquina virtual conhecida por criar aplicações distribuídas com baixa latência e tolerante a falhas.
Por ser executado através dessa Virtual Machine, permite que os desenvolvedores utilizem todas as bibliotecas do Erlang enquanto desenvolvem com o Elixir.
Quais os diferenciais do Elixir?

Um dos diferenciais do Elixir é o Polimorfismo, que consiste na capacidade de assumir diferentes formas. Isso fez com que a linguagem se tornasse extensível, ou seja, é possível adicionar novas funcionalidades sempre que necessário.
Ele ganhou destaque porque passou a ser adotado em grandes soluções. A linguagem conta com uma comunidade grande e ativa, que realiza eventos e conferências nos quatro cantos do mundo. E muito disso é devido à junção de performance com facilidade de desenvolvimento e, consequentemente, alta produtividade.
O Elixir pode ser utilizado desde uma aplicação web até em um sistema embarcado. Tem um grande ecossistema e boas ferramentas para facilitar a vida dos desenvolvedores.
Ele conta, por exemplo, com o Mix, uma ferramenta de compilação que fornece tarefas para criar, compilar, testar aplicativos e gerenciar projetos e dependências. E através do Hex, seu package manager oficial, é possível encontrar uma quantidade gigante de libs, incluindo as do Erlang.
Ele disponibiliza um framework chamado ExUnit para a realização de testes unitários e, ainda, possui um terminal interativo, o IEx (Elixir’s Interactive Shell), que oferece funcionalidades como:
Autocompletar;
Histórico;
Avaliação de expressões.
E, como é visto em outras linguagens nesse formato imperativo de programar, é possível executar códigos com comandos e funções em tempo real. Isso é muito bom para quem está aprendendo a lidar com linguagem ou que possui uma grande demanda de projetos a serem executados.
Alguns dos Frameworks mais conhecidos do Elixir são:
1. Phoenix: Permite criar aplicativos interativos na web rapidamente. Pode ser utilizado, portanto, para o desenvolvimento web, de APIs e aplicativos HTML5;
2. Nerves: Trata-se da plataforma e infraestrutura de código aberto que permite criar, implantar e gerenciar dispositivos IoT com total segurança, velocidade e em escala. Também serve para Embedded;
3. Plug: Destinado para aplicações na web;
4. Sugar: Muito utilizado para desenvolvimento web, garantindo rapidez, facilidade e eficácia ao projeto.

Quais empresas e projetos utilizam o Elixir?

Essa linguagem é utilizada por grandes empresas, seja no desenvolvimento web ou na construção de sistemas embarcados. Entre elas, estão:
Bleacher Report, site esportivo sediado em São Francisco (EUA);
Inverse, outra empresa americana de mídia digital;
Adobe, multinacional americana que desenvolve programas de computador, como Acrobat Reader.
E-MetroTel, uma companhia de comunicação integrada;
Moz, empresa de software focada em SEO e Inbound Marketing.
Entre as soluções mais famosas que foram criadas utilizando o Elixir, destacam-se:
WhatsApp, aplicativo de troca de mensagem utilizado por 2 bilhões de pessoas no mundo;
Pinterest, rede social para compartilhamento de imagens;
Discord, aplicativo, projetado especialmente para comunidade de jogos, que permite que as pessoas se comuniquem por voz, vídeo e texto;
Envato, um marketplace para recursos digitais e pessoas criativas.
Como é possível perceber, o Elixir é uma linguagem brasileira que conquistou empresas no mundo todo. Seus benefícios são diversos – o que pode ser percebido pelo fato de estar por trás de aplicativos utilizados em larga escala.
Características
Uma linguagem que compila para bytecode para a máquina virtual da Erlang (BEAM)
Tudo é uma expressão
Funções de Erlang podem ser chamadas de Elixir, sem impacto no tempo de execução, devido à compilação para o bytecode Erlang, e vice-versa
Metaprogramação permitindo a manipulação direta de árvores sintáticas abstratas
Suporte para documentação via docstrings tipo Python na linguagem de formatação Markdown.
Polimorfismo via um mecanismo chamado protocolos. Como em Clojure, os protocolos fornecem um mecanismo de ligação dinâmica. No entanto, isso não deve ser confundido com o despacho múltiplo uma vez que os protocolos em Elixir despacham em um único tipo.
Ênfase na recursão e funções de ordem superior em vez de looping baseado em efeitos colaterais.
Ferramentas internas para gerenciamento de dependências, compilação de código, execução de testes, formatação de código, depuração remota e muito mais.
Coleções preguiçosas e assíncronas com streams
Casamento de padrões (Pattern matching)
Suporte a Unicode e cadeias UTF-8

Exemplos
Os exemplos a seguir podem ser executados em um shell IEX ou salvos em um arquivo e executados a partir da linha de comando, digitando 
elixir <filename>.
Exemplo clássico de Hello world:
iex> IO.puts "Hello World!"
Hello World!
Compreensões
iex> for n <- [1,2,3,4,5], rem(n,2) == 1, do: n*n
[1, 9, 25]
Pattern Matching (desestruturação)
iex> [1, a] = [1, 2]
iex> a
2

iex> {:ok, [hello: a]} = {:ok, [hello: "world"]}
iex> a
"world"

Pattern Matching (cláusulas múltiplas)
iex> case File.read("path/to/file") do
iex>   {:ok, contents} -> IO.puts("found file: #{contents}")
iex>   {:error, reason} -> IO.puts("missing file: #{reason}")
iex> end

Pipe Operator
iex> "1" |> String.to_integer() |> Kernel.*(2)
2

Módulos
defmodule Fun do
  def fib(0), do: 0
  def fib(1), do: 1
  def fib(n) do
    fib(n-2) + fib(n-1)
  end
end
Sequencialmente distribuindo mil processos
for num <- 1..1000, do: spawn fn -> IO.puts "#{num * 2}" end
Executando uma tarefa de forma assíncrona
task = Task.async fn -> perform_complex_action() end
other_time_consuming_action()
Task.await task