Gleam já não compila mais para código-fonte Erlang
O Gleam, uma linguagem funcional tipada estaticamente que mira a VM Erlang e JavaScript, mudou seu backend Erlang para emitir Erlang abstract forms (um formato AST) em vez de código-fonte Erlang legível por humanos. Os comentaristas veem isso como uma maturação técnica que alinha o Gleam com outras linguagens do BEAM, ao mesmo tempo em que revisitam trade-offs de design em torno de alvos de compilação, desempenho e ferramentação. A conversa também destaca o apelo crescente do Gleam — especialmente para serviços web e uso full-stack com JS — junto com elogios à sua comunidade, simplicidade e ecossistema em evolução.
Mudança no backend Erlang do Gleam
- O Gleam agora emite “abstract forms” de Erlang (a AST/IR do compilador Erlang) em vez de código-fonte Erlang legível por humanos.
- Vários comentaristas observam que esta é a mesma representação amplamente usada no ecossistema BEAM (incluindo Elixir e transformações de parse).
- Um comentarista critica inicialmente a antiga escolha de gerar código-fonte textual em vez de abstract forms, chamando-a de redundante e propensa a erros.
- Um contribuinte principal explica a decisão original: na época, abstract forms não eram o “padrão” claro, a API do Core Erlang não era estável para um compilador externo em Rust, e emitir código-fonte oferecia uma saída para Erlang e permitia aproveitar as ferramentas de build do Erlang.
- Agora o Gleam escreve diretamente o Erlang Term Format; ainda existe um gerador de código-fonte Erlang, principalmente para testes.
“Transpiler” vs Compilador
- O ponto do artigo de que “transpiler” não é inerentemente pejorativo provoca debate.
- Alguns observam que o pipeline antigo era de fato pior, mas por causa da implementação, não por produzir código-fonte.
- Outros argumentam que, se você consegue reimprimir abstract forms de volta para texto Erlang, a distinção entre “AST” e “código-fonte” é em parte semântica.
Alvos, casos de uso e interoperabilidade
- O Gleam é descrito como uma linguagem funcional de propósito geral, tipada estaticamente e parecida com ML, voltada para simplicidade, segurança e boa ferramentação.
- Alvo principal para servidores: BEAM (VM do Erlang). Alvo secundário: JavaScript, principalmente para web/front-end ou outros contextos hospedados em JS (por exemplo, apps web com Lustre).
- Um comentarista questiona por que JS é um alvo se o Gleam não é “para UI”; outros respondem que JS é amplamente útil além de UIs e que ter uma única linguagem para servidor, SSR e front-end tipado é atraente.
- A interoperabilidade com Elixir é possível, mas não “perfeita” devido aos diferentes sistemas de tipos.
Backends nativos / outros
- Alguns gostariam que o Gleam compilasse para um alvo nativo (por exemplo, Rust, Go, C, Wasm, LLVM IR).
- Um contribuinte principal argumenta:
- Rust é um mau alvo de compilação: compilador lento, não amplamente instalado, e seu design para autores humanos não se adapta bem a ser uma IR de backend.
- O GC e o modelo de goroutines do Go não são ideais para o estilo imutável e baseado em processos do Gleam.
- IRs de nível mais baixo (C, Wasm, LLVM, Cranelift) seriam mais apropriadas se uma rota nativa fosse perseguida.
- Alternativas como empacotar o BEAM em um único executável (por exemplo, via Gleepack) já podem gerar binários pequenos e portáveis.
Comparações de linguagem e curva de aprendizado
- Comparações: o Gleam é frequentemente mais comparado a OCaml/Standard ML/Elm/F# do que a Rust.
- Alguns acham que usuários de Rust podem considerar a sintaxe e o pattern matching do Gleam acessíveis; outros alertam que expectativas conceituais vindas de Rust (ownership, borrowing) não se transferem e podem causar confusão.
- Erlang vs Elixir vs Gleam:
- Gleam: tipada, minimalista, sem macros, sem pattern matching nos cabeçalhos de função (uma troca pela simplicidade).
- Erlang: elogiada por matchers/guards e por uma sintaxe surpreendentemente agradável para alguns.
- Elixir: valorizada por macros, integração com OTP, excelente REPL e framework web maduro; preferida por alguns usuários de Rust apesar da tipagem estática do Gleam.
Comunidade, ecossistema e adoção
- Vários comentários elogiam a comunidade do Gleam como excepcionalmente amigável, incluindo transmissões ao vivo e palestras educacionais.
- Usuários relatam boas experiências construindo projetos reais (por exemplo, APIs/serviços web, apps via Gleam + Lustre + Tauri).
- Alguns veem o Gleam se tornando seu stack padrão; outros lamentam não ter projetos de trabalho para usá-lo.
- Um comentarista se preocupa que, numa era de codificação baseada em LLM, a “amigabilidade para LLM” possa limitar a adoção de linguagens de nicho, o que acha desanimador.
Tópicos laterais diversos
- Tangente detalhada sobre o uso de vírgulas e normas gramaticais em inglês; o consenso: o estilo varia e a maioria das pessoas não se importa muito fora de contextos formais.
- Breve discussão sobre integrar código gerado pelo Gleam com ferramentas como o depurador Erlang do WhatsApp; considerado trivial se as flags de compilação forem passadas.
- Crítica breve ao branding do Gleam por parecer “brinquedos de menina”, com reação de outros que acham essa insegurança estranha ou irrelevante.