Saltar para o conteúdo

Elixir (linguagem de programação)

Origem: Wikipédia, a enciclopédia livre.
Elixir
Paradigma Multiparadigma, funcional, concorrente, distribuída
Surgido em 2012 (11–12 anos)
Última versão 1.16.2[1] (10 de março de 2024; há 7 meses)
Criado por José Valim
Estilo de tipagem forte, dinâmica
Influenciada por
Influenciou LFE
Licença Apache License 2.0[2]
Página oficial elixir-lang.org

Elixir é uma linguagem de programação funcional, concorrente, de propósito geral que executa na máquina virtual Erlang (BEAM). Elixir compila em cima de Erlang para fornecer aplicações distribuídas, em tempo real suave, tolerante a falhas, non-stop, mas também a estende para suportar metaprogramação com macros e polimorfismo via protocolos.[3]

Elixir é usada por empresas como E-MetroTel, Pinterest e Moz. Também é usada para desenvolvimento web, por empresas como Bleacher Report, Discord e Inverse, e para a construção de sistemas embarcados. A comunidade organiza eventos anuais nos Estados Unidos, Europa e Japão, além de eventos e conferências locais menores.

Assim como Lua, Elixir é uma linguagem de programação desenvolvida por brasileiros, sendo a vigésima quarta linguagem de programação mais usada do mundo no GitHub.[4]

A linguagem de programação Elixir foi criada por José Valim, desenvolvida no hub de P&D da Plataformatec, uma subsidiária do Nubank.[5] Seus objetivos foram permitir uma maior extensibilidade e produtividade no Erlang VM, mantendo a compatibilidade com ferramentas e ecossistema de Erlang.[6]

Em 13 de julho de 2018, o canal do YouTube Honeypot lançou um documentário sobre a linguagem Elixir chamado Elixir: The Documentary.[7]

Características

[editar | editar código-fonte]
  • Uma linguagem que compila para bytecode para a máquina virtual da Erlang (BEAM)[8]
  • Tudo é uma expressão [8]
  • 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[8]
  • Suporte para documentação via docstrings tipo Python na linguagem de formatação Markdown.[8]
  • 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

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 do programa Olá Mundo:

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

Operador pipe:

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

Referências

  1. «Release v1.16.2 · elixir-lang/elixir». github.com (em inglês). 10 de março de 2024. Consultado em 1 de maio de 2024 
  2. «elixir/LICENSE at master · elixir-lang/elixir · GitHub». GitHub 
  3. José Valim. «Elixir». Consultado em 26 de abril de 2016 
  4. «GitHub Language Stats». madnight.github.io. Consultado em 23 de junho de 2024 
  5. «Important information about our Elixir and Ruby Open Source projects». Consultado em 7 de janeiro de 2020 
  6. «Elixir - A modern approach to programming for the Erlang VM». Consultado em 26 de abril de 2016 
  7. Elixir: The Documentary, consultado em 24 de dezembro de 2023 
  8. a b c d e «Elixir». Consultado em 26 de abril de 2016 

Ligações externas

[editar | editar código-fonte]