Gleam: un lenguaje seguro por tipos en la VM de Erlang
Un nuevo lenguaje de tipo estático y estilo ML para la VM de Erlang, Gleam aspira a combinar una fuerte seguridad de tipos con la famosa concurrencia y tolerancia a fallos de BEAM, además de compilar a JavaScript. Los comentaristas elogian su sintaxis limpia, su sistema de tipos Hindley–Milner, su compilador basado en Rust y su ecosistema en crecimiento, pero plantean dudas sobre la madurez de OTP, las herramientas de pruebas y los riesgos a largo plazo de apostar por un lenguaje nicho frente a stacks mainstream como C#, Java o TypeScript. La postura política explícita del proyecto en su sitio web también provoca debate sobre si ese tipo de mensajes pertenece a las herramientas técnicas.
Sentimiento general sobre Gleam y BEAM
- Muchos comentaristas están entusiasmados: lenguaje de estilo ML con seguridad de tipos sobre BEAM, compilación a JS, buena comunidad, ecosistema en crecimiento.
- Algunos lo ven como una alternativa sólida a Rescript y un buen complemento para Phoenix/LiveView.
- Unos pocos sienten curiosidad por BEAM pero dudan en ejecutarlo en producción, viendo BEAM como una “caja negra”; otros responden que BEAM tiene excelentes herramientas de introspección y depuración y que a menudo es más fácil de inspeccionar que Node/JVM.
Sistema de tipos y diseño del lenguaje
- El sistema de tipos es Hindley–Milner, más cercano a OCaml que a Haskell: tipos de datos algebraicos, genéricos, alias de tipos; sin type classes, sin pureza.
- Algunos lo consideran “básico” y querrían tipos estructurales/teóricos de conjuntos; otros preguntan qué problemas reales resolvería eso.
- El pattern matching se ve como fuerte; la sintaxis, en general, recibe elogios por ser limpia.
- Los argumentos con etiqueta se discuten mucho: a algunos les parecen encantadores y buenos para la legibilidad y el diseño de APIs; otros ven complejidad extra y redundancia.
- El comportamiento del operador pipe (inserción automática como primer argumento) es controvertido: a algunos les gusta la brevedad, otros sienten que reduce la claridad.
- Se lamenta brevemente la falta de sobrecarga de funciones frente a Elixir.
OTP, ecosistema e interoperabilidad
- El soporte nativo de OTP llega vía
gleam_otpygleam_erlang; se describe como experimental, pero ya usado en producción, incluyendo un servidor web reportado como más rápido que Cowboy. - Todo el OTP subyacente sigue siendo accesible mediante FFI.
- Los NIFs y ports en Rust están disponibles (vía herramientas como Rustler), pero requieren cuidado para encajar con el modelo de procesos/planificador de BEAM.
Herramientas, lenguaje de implementación y compiladores en Rust
- Gleam está escrito en Rust y se cita como un gran ejemplo de una implementación de lenguaje basada en Rust.
- La discusión aborda pros y contras de Rust frente a Haskell/OCaml para trabajo de compiladores: se elogia el ecosistema de Rust (parsers, LSP, diagnósticos, herramientas incrementales), pero algunos consideran incómodos los enums y el ownership de Rust para ASTs.
Elección de lenguaje, contratación y stacks “no convencionales”
- Una opinión: usar lenguajes nicho de BEAM en negocios comunes perjudica la contratación y puede forzar reescrituras costosas; los stacks mainstream (C#, Java, Python, TypeScript, quizá Go) son “más seguros.”
- Contraopinión: contratar por capacidad, enseñar el lenguaje; Erlang/Elixir son simples de aprender, y los stacks no convencionales pueden atraer desarrolladores de mayor calibre. Varias anécdotas afirman que contratar e incorporar gente en Elixir no es difícil.
Casos de uso y debate sobre “scripting tipado”
- Algunos quieren Gleam como una opción de scripting tipado; otros sostienen que BEAM y los tipos explícitos encajan mal con scripts rápidos frente a shells centrados en cadenas, pero son excelentes para sistemas distribuidos más grandes.
Historia de pruebas
- Las pruebas giran actualmente en torno a
gleeunit, que también funciona en el destino JS. - Es intencionalmente minimalista; los mocks no se admiten deliberadamente, con preferencia por la inyección de dependencias. Algunos usuarios querrían más guía o funciones.
Directrices de la comunidad y política
- El sitio del proyecto declara explícitamente posiciones sociales/políticas (por ejemplo, anti-racista/anti-fascista, pro derechos trans).
- Esto desencadena un debate secundario: algunos lo ven como una expresión apropiada de los valores del proyecto; otros lo encuentran polarizante y dicen que evitarán o desaconsejarán su uso por ello. Ambas partes acusan a la otra de “meter política” en espacios técnicos.