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_otpegleam_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.