
这两天, 2025 Stack Overflow 年度调查发布,其中有很多有趣的发现。比如,超八成开发者在过去一年中使用过 OpenAI GPT,但 Claude Sonnet 是最受开发者认可的大模型;从业经验相近情况下,高级管理者和工程主管的薪资中位数依然更高,超过 13 万美元,而创始人、架构师和产品经理的中位薪资则在 9.2 万到 10.4 万美元之间。
而编程语言方面,在最受开发者喜爱的编程语言 Top3 中,杀出了一匹“黑马”, Gleam 以 70%的受欢迎程度,仅次于第一名 72%的 Rust。这是 Gleam 首次出现在 Stack Overflow 开发者调查中,表明其在更广泛的软件开发领域中的地位正在上升。

Gleam 编程语言作者 Louis Pilfold 还转发这个结果,可见其十分惊喜,帖子下面也都是开发者的祝福。

实际上在 4 月时,Thoughtworks 就将 Gleam 纳入了其技术雷达(Technology Radar)的“评估”象限,认为这是一个值得探索的编程语言与框架。当前,Gleam 在 Github 上受收获了 19.7k stars。
https://github.com/gleam-lang/gleam
为一次大会演讲而生的语言
Louis 是一位英国的开发者,在 2018 年开始全职开发 Gleam 前的 5 年时间里,他先后在 12 家公司任职过,分别使用过 Ruby、Javascript、Elixir、Go、Python、Elm、Rust 等编程语言。期间,还曾创业并作为技术创始人设计和开发了广告行业的版权管理工具 Waive。
Louis 写 Gleam 的原因很简单:为了一个大会演讲。

上面是他在 2017 年 Elixir London 上的照片,当时他的演讲内容是怎么写一个面向 BEAM 的编译器。
“讲得还不错,反响也挺好。结束后我就把项目扔了,没再想过它——至少我当时是这么以为的。但实际上,我还是会偶尔想起这个项目。” Louis 说道。
但这个项目还是被搁置了很久。当时,Louis 有全职工作,还在做开源,会写很多不同的语言。
“每次写这些语言时,我总会希望我写的是另外一门语言。写 Elm 的时候我会想,Elm 没法做 IO、没并发,真希望用的是 Elixir;写 JavaScript 时又想,真希望它有 Rust 的工具链。”Louis 说道,“因此我开始想,也许可以把我喜欢的这些语言里的好东西结合起来做一个自己的语言。因为我已经接受了这样一个事实:我理想中的语言并不存在。”Louis 说道。
后来 Louis 工作的初创公司被收购,他突然多出了很多自由时间,于是决定重新做 Gleam。
版本演变
总体来说,Gleam 是一种类型安全的函数式编程语言,用于构建可扩展的并发系统。它可编译为 Erlang 和 JavaScript,因此与其他“BEAM”语言,如 Erlang 和 Elixir 具有直接的互操作性。(BEAM 是在 Erlang 运行时系统中执行用户代码的虚拟机)
下面是最早期的 Gleam 语法。开始很多人说 Gleam 像 Haskell,但其实不是,它更像 C,用大括号。但 Gleam 保留了 Erlang 的多子句函数定义方式,也就是说流程控制是通过多个函数子句实现的。

“看起来挺奇怪,也没人喜欢。我当时觉得把测试直接写在函数定义里面是个很棒的想法,这样可以展示在文档中。但现在看来这想法挺烂的,因为你根本没法做测试初始化,只能输入一个参数看返回值,除了反转列表这种小玩意儿,几乎没啥用。”Louis 说道。
这个语言在当时几乎没什么功能:没类型系统、没有设计方向,能做的也就是返回个字符串、调用个函数。Louis 的评价是:它本质上是一个很差劲的 Erlang 封装层。
下面是 2018 年 2 月 Louis 重启 Gleam 项目后的语法,看起来更像 OCaml 混合了一点 Elixir。

2019 年 4 月, Gleam 正式发布了 0.1 版本。那个时候, Gleam 把漂亮的 ML 风格语法换成了更像 JavaScript 的写法,但终于能写点真正能跑的小程序了。
再过了半年,语法基本就变成了如今的样子。Gleam 移除了 Erlang 风格的语法糖,还做了一些类型系统上的尝试,但后来 Gleam 砍掉了那些“很酷但没啥用”的高级特性,换成了更实用的东西,比如字符串拼接、命名参数、更好用的回调语法等。

“Gleam 的演进过程,就是不断把‘性感的想法’剔除,留下真正对开发者有帮助的核心功能。我觉得这让 Gleam 变得非常精致。”Louis 表示。
此后,从 v0.16 版本开始,Gleam 支持了 JavaScript 编译功能,虽然这让生态更复杂了,但语言本身没有复杂化。Gleam 还做了内置构建工具。一开始是用 Erlang 的 Rebar3,它确实很强大,但 Louis 表示,还是能明显感受到那不是为 Gleam 设计的。
那时候,Louis 写了很多 Rust 和 Go,发现它们的工具链非常棒,于是决定把这些“好用的东西”也带到 BEAM 里。”其集成了 hex 包管理器,Gleam 和 Erlang/Elixir 可以共用生态,彼此依赖。虽然用 Gleam 写的包还只有两百多个,但整个 hex 上有两万多个包,大家都可以用。此外,Gleam 还有语言服务器、代码格式化器等工具。因此,为了方便寻找,Louis 做了 Gleam 专用的包索引。
Gleam 在去年 3 月 4 日正式发布了 v1.0.0,今年 6 月发布了最新的 v1.11.1。
Louis 透露,在过去一年左右的时间里,Gleam 团队对 BEAM 虚拟机上的 Web 服务器与 Go 标准库的 Web 服务器(以及其他一些服务器)在一些 IO 任务上的表现进行了基准测试。结果显示,当请求包含请求体时,Gleam 的 Mist 和 Elixir 的 Bandit 的表现优于 Go,而 BEAM 上的老牌服务器 Cowboy 表现则差了不少。而当请求没有请求体、服务器只是简单返回 OK 时,Go 的吞吐量则更高。
“总体而言,在 IO 密集型任务中,BEAM 和 Go 在吞吐量方面非常接近,都是非常优秀的选择。”他表示,“但 BEAM 真正出色的地方在于可靠性。由于并发垃圾回收、进程隔离以及监督机制,BEAM 的 P99 表现优于 Go。Go 最近通过引入新的抢占式调度器,在这方面有了显著改进,但 Go 无法引入 BEAM 的其他一些特性,因为这些特性与 Go 语言的设计理念并不兼容。”
那有没有可能通过 NIF(本地实现函数)来弥补这方面的差距?
对此,Louis 表示,NIF 通常会让性能变得更差而不是更好。它很容易干扰调度器,调用本地函数存在 FFI(外部函数接口)开销,而且编译器和虚拟机在优化方面的空间也更小。“鉴于两种语言在这方面的能力非常接近,我认为最好的选择还是看团队对哪种语言更投入。我是个 BEAM 支持者,但如果团队里的其他人更想用 Go,我也会选择用 Go。”
开发者数量为何增长如此之快
Gleam 的简洁性、静态类型系统,以及友好的开发工具,是开发者们选择它的主要原因。
“它太棒了!Gleam 语法优美,虽然小巧但功能非常强大。”开发者 Taha Shashtari 说道,他详细列举了 Gleam 的优点:
Gleam 非常小,一个下午就能学会。小型语言的优点在于学习速度快、编译速度快,并且执行方式更少,这使得代码更易于阅读和推理。
Gleam 语法简洁易读。当不需要完整的单词时,它可以节省您的按键时间,例如用 fn 代替 function,以及 pub 代替 public。
支持标签参数的编程语言相对较少,Gleam 就是其中之一。使用标记参数,开发者就不必在调用函数时记住参数的顺序,也不必转到函数定义来了解它们的含义。
Gleam 是一种函数式语言,因此开发者将编写许多组合函数,这意味着一个函数的输出将成为下一个函数的输入。有了管道,代码将更加清晰、更易于阅读。
虽然 Gleam 没有 if 语句或 return 关键字,但它提供了一种更强大的方法:模式匹配。值得注意的是,Gleam 被广泛称赞的模式匹配,除了个别细节外,其他与 Elixir 是一样的。Louis 表示因为它们都从 Erlang 继承了这一特性。
Gleam 提供了不少工具来提升开发者体验,并且社区氛围非常友好。
Gleam 的采用率持续增长得益于一个活跃且充满热情的社区支持。Louis 高度重视开发者体验,这使得 Gleam 对函数式编程爱好者和初学者都具有相当大的吸引力。

Gleam 的生态系统不断发展,已经有了很多项目。比如上文提到的 Mist,它是一个纯 Gleam 的 HTTP 1.1 服务器,支持 WebSockets 等,不依赖 Erlang 的 Web 服务器,甚至不用 Erlang 的 OTP,而用 Gleam 自己的 OTP 实现。
Web 框架方面有 Wisp,这是 Louis 自己写的。数据库方面已经绑定了 PostgreSQL、SQLite、mongoDB、redis。前端方面,Luster 框架是用 Gleam 编写的,类似 Elm 或 React 的状态管理系统,能实现类似 LiveView 的功能,并且可以灵活选择应用的架构部分。
各种服务器、客户端、API 客户端、中间件等等之间能够互操作,其中一个关键就是 Gleam 的核心库 gleam_http,它定义了一些标准的类型,比如请求、响应、Header 等等。这些库虽然是由不同人、在不同时间编写的,但因为共享了这些核心类型,所以都能很好地协作。
已经在生产环境中使用 Gleam 的公司则强调了其良好的开发者体验和可维护性。例如,Nestful 团队在重新用 Gleam 编写项目时,就表示其主要的选择原因是 Gleam 所带来的代码清晰度和易用性。
在一个由社区维护的“在生产中使用 Gleam 的公司列表”中,有 19 家企业选择了 Gleam,其中包括 Web 开发咨询公司 CroCoder、AI 马匹护理助手 HayHay、会计自动化软件 Ottimizza、美国贸易与出口公司等各领域企业,还有卡内基梅隆大学等高等学校。
Gleam 借鉴了 Go 的“tour”教程,做了 Gleam 官网上的在线入门教学。2023 年,Gleam 得到了 Erlang Ecosystem Foundation 的资助在 Exercism 发布免费教程,从最初的一套练习题,现在已经有了一套完整的教学大纲。
结束语
自 Gleam v1 发布以来,Louis 的角色已从编程转向领导者。核心成员 Giacomo Cavalieri 一直无偿支持 Gleam 的快速发展,今年开始获得一些赞助。另一位核心成员 GearsDatapacks 是业余软件开发者,主要探索函数式编程、编译器和 Minecraft 数据包。包括他们三人在内,该项目已经有了 257 位贡献者。
“我一直在学习 Elixir,简直不敢相信 BEAM 竟然如此强大。我之前就对 elixir + Rust NIF 感到兴奋不已,现在 Gleam 来了!我已经很久没有这么兴奋了!”有开发者表示。还有人直言:“这就是我要找的语言!”
在 5 个月前的一个关于“我应该学习 Gleam 吗?”的提问中,Louis 现身回答:“是的,Gleam 非常适合初学者,而且很友好!我们用 Lustre 代替了 React,这确实是一个进步!”
参考链接:
https://survey.stackoverflow.co/2025/technology/
评论