Gleam: uma linguagem type-safe na VM Erlang

Uma nova linguagem estaticamente tipada, estilo ML, para a VM Erlang, Gleam busca combinar forte segurança de tipos com a robustez de concorrência e tolerância a falhas do BEAM, além de compilar para JavaScript. Os comentadores elogiam sua sintaxe limpa, o sistema de tipos Hindley–Milner, o compilador em Rust e o ecossistema em crescimento, mas levantam dúvidas sobre a maturidade de OTP, as ferramentas de teste e os riscos de longo prazo para contratação ao apostar em uma linguagem de nicho em vez de stacks mainstream como C#, Java ou TypeScript. A posição política explícita do projeto em seu site também provoca debate sobre se esse tipo de mensagem pertence a ferramentas técnicas.

Sentimento geral sobre Gleam e BEAM

  • Muitos comentadores estão entusiasmados: linguagem estilo ML com type safety no BEAM, compilação para JS, boa comunidade, ecossistema em crescimento.
  • Alguns veem isso como uma forte alternativa ao Rescript e um bom complemento para Phoenix/LiveView.
  • Alguns têm curiosidade sobre o BEAM, mas hesitam em usá-lo em produção, vendo o BEAM como uma “caixa preta”; outros respondem que o BEAM tem excelentes ferramentas de introspecção e depuração e é frequentemente mais fácil de inspecionar do que Node/JVM.

Sistema de tipos e design da linguagem

  • O sistema de tipos é Hindley–Milner, mais próximo de OCaml do que de Haskell: tipos algébricos de dados, generics, aliases de tipo; sem type classes, sem pureza.
  • Alguns acham isso “espartano” e gostariam de tipos estruturais/teóricos de conjuntos; outros perguntam que problemas reais isso resolveria.
  • O pattern matching é visto como forte; a sintaxe, em geral, é elogiada por ser limpa.
  • Argumentos rotulados são amplamente discutidos: alguns acham-nos encantadores e bons para legibilidade e design de APIs; outros veem complexidade extra e redundância.
  • O comportamento do operador pipe (inserindo automaticamente como primeiro argumento) é controverso: alguns gostam da brevidade, outros sentem que reduz a clareza.
  • A falta de sobrecarga de funções em comparação com Elixir é brevemente lamentada.

OTP, ecossistema e interoperabilidade

  • O suporte nativo a OTP vem via gleam_otp e gleam_erlang; é descrito como experimental, mas já usado em produção, incluindo um servidor web relatado como mais rápido que Cowboy.
  • Todo o OTP subjacente ainda pode ser acessado via FFI.
  • NIFs e ports em Rust estão disponíveis (via ferramentas como Rustler), mas exigem cuidado para se adequar ao modelo de processos/schedulers do BEAM.

Ferramentas, linguagem de implementação e compiladores em Rust

  • Gleam é escrito em Rust e citado como um forte exemplo de uma implementação de linguagem baseada em Rust.
  • A discussão aborda prós/contras de Rust versus Haskell/OCaml para trabalho de compiladores: o ecossistema Rust (parsers, LSP, diagnósticos, tooling incremental) é elogiado, mas alguns acham enums/ownership do Rust estranhos para ASTs.

Escolha de linguagem, contratação e stacks “não mainstream”

  • Uma visão: usar linguagens de nicho do BEAM em negócios comuns prejudica a contratação e pode forçar reescritas caras; stacks mainstream (C#, Java, Python, TypeScript, talvez Go) são “mais seguras.”
  • Visão oposta: contratar pela capacidade, ensinar a linguagem; Erlang/Elixir são simples de aprender, e stacks não mainstream podem atrair desenvolvedores de maior calibre. Várias anedotas afirmam que contratar e integrar pessoas em Elixir não é difícil.

Casos de uso e debate sobre “typed scripting”

  • Alguns querem Gleam como uma opção de scripting tipado; outros argumentam que BEAM e tipos explícitos são uma má combinação para scripts rápidos em comparação com shells centrados em strings, mas excelentes para sistemas distribuídos maiores.

História de testes

  • Os testes atualmente se concentram em gleeunit, que também funciona no alvo JS.
  • Ele é intencionalmente minimalista; mocks não são suportados de propósito, com preferência por injeção de dependência. Alguns usuários gostariam de mais orientação ou recursos.

Diretrizes da comunidade e política

  • O site do projeto declara explicitamente posições sociais/políticas (por exemplo, anti-racista/anti-fascista, pró-direitos trans).
  • Isso gera um debate lateral: alguns veem isso como expressão apropriada dos valores do projeto; outros acham polarizador e dizem que evitarão ou desaconselharão o uso por causa disso. Ambos os lados acusam o outro de “trazer política” para espaços técnicos.