Gleam 是一种类型安全的语言,既可以面向 Erlang 虚拟机(BEAM),也可以面向 JavaScript。在 1.19.0 版本之前,Gleam 编译器在面向 BEAM 时会生成可读的 Erlang 源代码,随后这些代码需要再由 Erlang 编译器编译成 BEAM 字节码。v1.19.0 版本于 2026 年 10 月 5 日发布,取消了这一步骤,使得 Gleam 编译器现在直接输出 Erlang 抽象形式。

这一变化带来两个具体的好处。首先,通过跳过 Erlang 编译器的初始标记化和解析阶段,整体编译速度提升,显著减少了 Gleam 在 BEAM 上的项目构建时间。其次,生成的抽象形式保留了位置元数据,能够直接映射到原始 Gleam 源代码,因此 BEAM 的崩溃报告和堆栈跟踪可以显示确切的行号,而不仅是近似到最近的函数,从而改进了调试体验。

Gleam 团队曾考虑直接生成 BEAM 字节码,但最终否定了这个想法,因为 BEAM 字节码会随每个 Erlang VM 发布而变化,需要持续维护以跟上这些变化,并且还要重新实现 Erlang 编译器数十年的优化。采用抽象形式则提供了一种可持续的折中方案,在不承担这些维护负担的情况下仍能获得大部分性能提升,这一策略已经被姐妹语言 Elixir 采用。