打开网易新闻 查看精彩图片

2亿用户,50个工程师。这是WhatsApp 2014年被Facebook收购时的数据。支撑这个数字的,是一门1976年诞生的语言——Erlang。但过去48年里,它始终缺一块拼图:静态类型。

Elixir让Erlang变美了,Gleam让它变「安全」了。

2024年,Gleam 1.0正式发布。这不是又一个「更好用的Erlang」,而是把现代类型系统塞进BEAM虚拟机(Erlang运行时环境)的第一次成功尝试。编译时抓错,零运行时开销,还能直接跑Erlang生态的全部代码。

凌晨3点的崩溃,编译器本可以拦住

凌晨3点的崩溃,编译器本可以拦住

写过Elixir的人都懂那种痛:本地测试全绿,上线后某个边缘case触发类型不匹配,整个服务挂掉。动态类型的自由,在分布式系统里变成定时炸弹。

Gleam的解法很直接——每个函数必须声明类型。

```gleam fn add(a: Int, b: Int) -> Int { a + b } ```

传入字符串?编译失败。漏写case分支?编译失败。不是运行时抛异常,是代码根本跑不起来。把「可能出错」变成「不可能编译」,这是类型系统的核心交易。

模式匹配是BEAM系语言的招牌。Gleam继承了这个传统,但加了保险:

```gleam pub type Shape { Circle(radius: Float) Rectangle(width: Float, height: Float) }

pub fn area(shape: Shape) -> Float { case shape { Circle(r) -> 3.14159 *. r *. r Rectangle(w, h) -> w *. h } } ```

如果哪天加了Triangle,但area函数没更新,编译器会指着你的鼻子骂。不是「可能漏掉」,是「一定被抓住」。

打开网易新闻 查看精彩图片

不是取代,是「寄生」

不是取代,是「寄生」

Gleam最狠的设计决策:不造新轮子,直接寄生在Erlang生态上。

它编译成Erlang代码,不是字节码,是可读的.erlang文件。这意味着什么?GenServer、supervisor、ETS表、OTP行为模式——全部原生可用。甚至可以直接调Erlang函数:

```gleam @external(erlang, "crypto", "strong_rand_bytes") fn random_bytes(size: Int) -> BitArray ```

一行注解,打通Erlang的crypto模块。没有FFI(外部函数接口)的胶水代码,没有性能损耗,就是直接的函数调用。

这种设计让Gleam避开了新语言最凶险的陷阱:生态荒漠。你不需要等Gleam版的Redis客户端,直接用Erlang的。不需要重写监控工具,OTP的observer照样能用。

对BEAM系开发者来说,迁移成本接近零——学语法,不改架构。

一条命令,跑进浏览器

一条命令,跑进浏览器

Gleam的第二个靶心是JavaScript。

```bash gleam build --target javascript ```

同一份代码,可以跑在Node.js或浏览器里。类型系统在这里变成跨平台的契约:后端写好的业务逻辑,前端直接复用,编译时保证两端数据格式一致。

这不是「写一次,到处运行」的老调重弹。BEAM和JavaScript的并发模型完全不同,Gleam也不假装它们一样。它做的是代码层面的复用:纯函数、类型定义、业务规则——这些可以共享,平台相关代码用条件编译隔离。

打开网易新闻 查看精彩图片

安装体验也刻意做得轻量:

```bash curl -sSf https://gleam.run/install | sh gleam new my_project cd my_project gleam run ```

三分钟从0到Hello World。对习惯了Rust编译器折磨的人来说,这几乎是温柔的。

谁该认真看一眼

谁该认真看一眼

Gleam 1.0的发布,在HN(Hacker News,技术社区)上刷了两天屏。但热度之外,更值得关注的是它的定位精度。

它不是Go那种「简单至上」的妥协,也不是Rust那种「零成本抽象」的极致。它瞄准的是一个被忽视的中间地带:需要BEAM的容错能力,又受不了动态类型的心惊胆战。

实时协作工具、金融支付系统、物联网网关——这些场景里,「5个9」的可用性不是口号,是合同条款。Gleam的价值在于,用类型系统把「容错」从运行时机制,部分前置到编译时检查。

当然,代价是有的。类型系统增加了前期设计负担,某些动态模式需要重构。社区还在早期,Stack Overflow上的问题数量不到Elixir的1%。

但Gleam的赌注是:BEAM生态的存量开发者,足够支撑它度过冷启动。而类型系统的吸引力,会缓慢但持续地拉新人入场。

项目核心维护者Louis Pilfold在发布笔记里写了一句很克制的话:「Gleam不是 finished,只是 stable。」1.0意味着API承诺,不意味着功能完备。宏系统还在设计,包管理器的私有仓库支持待完善,IDE体验离Rust-Analyzer有距离。

但这些都不妨碍一个判断:BEAM虚拟机终于有了一门现代类型语言,而这件事本身,可能改变未来几年高可用系统的技术选型。

如果你现在用Elixir写核心业务,会愿意为类型安全切一部分代码到Gleam吗?还是说,动态类型的灵活性,在你们的场景里其实从未真正出过问题?