Elixir 1.20 chega com sistema de tipagem gradual e inferência automática
Aprofundamento CEVIU
Aprofundamento
O Elixir 1.20 não adiciona tipos como uma camada opcional, ele os constrói com base em teoria dos conjuntos, refinando o tipo dynamic() em tempo de compilação conforme o código se desdobra em guards, pattern matches e cláusulas de case/with. Isso é diferente de Python’s Any ou TypeScript’s any, que desativam checagem; aqui, dynamic() é um intervalo que encolhe à medida que o compilador acumula evidências. O sistema identifica falhas comprovadas, não apenas possíveis, e já detecta código morto com precisão em projetos reais, sem exigir anotações manuais.
A nova opção :module_definition no compilador permite alternar entre módulos interpretados ou compilados durante o build, acelerando a compilação em máquinas multicore sem alterar o bytecode gerado. A versão exige Erlang/OTP 27+, mas roda nativamente em OTP 29, e já posiciona o build do Elixir como o mais rápido entre as linguagens BEAM em benchmarks sintéticos. As operações do módulo Map agora têm tipagem completa na biblioteca padrão, incluindo suporte a chaves não atômicas via tipagem baseada em domínio.
O que mudou
A cobertura anterior do CEVIU não tratava tipagem em Elixir, esta é a primeira vez que o tema aparece na newsletter. Mas há conexão técnica real com o Rust 1.96.0: ambos avançam em garantias de correção sem sacrificar ergonomia. Enquanto o Rust estabilizou core::range para tornar spans Copy e facilitar estruturas leves, o Elixir 1.20 usa refinamento de tipos em guards para obter segurança parcial mesmo em código não anotado. Nenhum dos dois exige intervenção manual massiva, mas o Elixir vai além ao eliminar a necessidade de anotações por completo na versão inicial.
Por que isso importa
Para desenvolvedores BEAM, isso significa detecção de erros antes do deploy, sem mudar o estilo de programação. Para equipes que avaliam migrações (como as de Go para Rust citadas em 25/05), o Elixir 1.20 oferece uma alternativa com garantias de tempo de compilação próximas às do Rust, mas com curva de aprendizado mais suave e sem modelo de propriedade. Do ponto de vista de DX, a inferência automática reduz ruído cognitivo: não há trade-off entre segurança e agilidade. E, tecnicamente, o sistema já está integrado ao pipeline de build, não depende de ferramentas externas ou linters.
Linha do tempo
Início do esforço para adicionar tipagem gradual baseada em teoria dos conjuntos ao Elixir
Artigo premiado sobre o design do sistema de tipos publicado
Lançamento oficial do Elixir 1.20 com sistema de tipagem gradual e inferência automática
Perguntas frequentes
O Elixir 1.20 exige que eu anote tipos no meu código?
Não. A versão 1.20 faz inferência completa sem anotações obrigatórias. O sistema analisa guards, pattern matching, cláusulas de função e expressões condicionais para deduzir tipos automaticamente. Anotações podem ser usadas futuramente, mas não são necessárias nem recomendadas nesta versão.
Como o tipo dynamic() é diferente do any do TypeScript ou do Any do Python?
Enquanto any e Any desligam a verificação de tipos, dynamic() é um tipo intervalar que se refina continuamente conforme o código executa logicamente, por exemplo, após um guard is_integer(x), o tipo de x passa de dynamic() para integer(). É segurança parcial embutida, não abdicação.
Essa tipagem afeta o runtime ou o bytecode gerado?
Não. O sistema opera inteiramente em tempo de compilação. Os arquivos .beam gerados são idênticos aos da versão 1.19, exceto onde otimizações automáticas eliminam código morto. Não há overhead de runtime, nem novas dependências ou alterações no comportamento da VM.
Posso usar o Elixir 1.20 com Erlang/OTP 26?
Não. A versão exige Erlang/OTP 27 ou superior. Ela foi testada e otimizada para OTP 27, 29, com suporte nativo a novas primitivas de concorrência e introspecção de módulos introduzidas nessa faixa de versões.
Fontes
- elixir-lang.orgfonte original
- Categoria
- CEVIU Web Dev
- Publicado
- 06 de junho de 2026
- Editoria
- CEVIU Web Dev
