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.