一门语言发 1.0,通常意味着「以后不折腾你了」。
Mojo 这次的 1.0,第一件事是把 fn 关键字给删了。
听着挺离谱。但你听我把这事儿讲完,就知道这个删除动作,恰恰是 1.0 该干的活。
时间线也够戏剧:8 月 11 日发 1.0,8 月 18 日编译器全量开源。而在这之前两个月,整个团队刚被高通花了近 40 亿美元买走。
一、Mojo 是个啥?先看写它的人
判断一门新语言值不值得花时间,最快的办法是看作者。
Mojo 出自 Chris Lattner 之手。这个名字你可能不熟,但他的作品你天天在用——LLVM、Clang、Swift、MLIR。
这履历什么水平?打个球迷才懂的比方:不是那种昙花一现的妖星,是巴蒂那种一脚下去球门就得抖三抖、而且十几年如一日的存在。编译器这行有他署名的东西,基本都成了行业地基。
2022 年,他和 Tim Davis(同为前 Google 工程师)创立 Modular,2023 年 Mojo 首次亮相。
它想解决的问题很具体:你在 Python 里写 AI,爽是爽,但一到性能瓶颈就得换语言、换工具链、换一套心智模型。
Mojo 的答案是——语法长得像 Python,但底下给你系统级语言的控制力,而且一份代码能同时打 CPU、GPU、NPU、ASIC。
这最后一句是关键。它冲的不是 Python 的慢,是 CUDA 的墙。
写 GPU kernel 不用再学一套单独的 DSL,需要压到极限时还能直接下到 PTX 汇编。
二、1.0 承诺了什么,又没承诺什么
先说承诺。
1.x 期间的改动将以增量为主,让开发者相信语言不会在脚下持续变形。
这句话对老用户的分量很重。Mojo 前三年 API 变得太狠,不少人试过一轮就跑了。
社区这三年的投入也不小:近 200 位贡献者提了 1100 多个 PR,改动超过 20 万行代码,另有 1000 多人提过 issue。
但「稳定」这两个字,得抠得再细一点。
真正受保护的,只是被显式标记为 stable 的那部分 API——它们遵循语义化版本,同一大版本内保证源码兼容。
现在完全稳定的 trait 有 Deinitable、Movable、Copyable、ImplicitlyCopyable。而 Array、List、Span、String、Bool、Optional 这些你天天用的,只稳了一部分接口。
没标 stable 的,往后照样可能改。
还有两条更该划重点:
ABI 没有稳定。1.0 保的是源码兼容,不是二进制兼容。
稳定性策略文档本身,官方写明是临时的。发现重大问题时还留了例外口子。
所以正确的理解是:1.0 不等于冻结,而是从「随便改」切换到了「改动要负责、要给迁移路径」。
三、fn 被删了:1.0 的代价
回到开头那个删除。
Mojo 原来有两个定义函数的关键字:def 松,fn 严——fn 强制类型检查、强制声明异常。
1.0 直接把 fn 整个移除了,用它会硬报错。而 fn 那套严格语义,全部并入了 def。
也就是说,语言没有变松,是把宽松那条路给堵了。
这操作像什么?像一款玩了三年的游戏突然出大版本,把双技能树砍成一条,还把简单模式删了。老玩家骂声一片,但新人再也不会一开始就选错路。
同期还有几处硬改动:
Pointer 和 UnsafePointer 合并成一个类型。危险性不再挂在类型上,而是转移到具体操作上——跳过边界检查的读写,得用 unsafe_ 前缀命名。
引入了实验性的 interior origins,专门追踪容器内部的引用。举个最经典的坑:你持有 List 某个元素的引用,然后调了一次 append() 触发扩容,那个引用就悬空了。现在编译器会在你后续使用它的地方直接拒绝编译。
Python 用户熟悉的 lambda 回来了,但要带括号和类型标注:lambda (x: Int) -> Int: x * 2
还有一条容易踩:Int 和 UInt 不能再传进 GPU kernel 了。因为它们在主机和设备上宽度可能不同,现在必须用 Int32 这类定宽类型。
好消息是迁移不至于要命:官方给几乎所有改动都准备了 deprecated 别名和编译器 fix-it,机械化替换就能过。
这些改动放在一起看,指向同一个意思——1.0 不是新功能大爆发,是把「同一件事有好几种写法」这个毛病给收拾了。
对一个 1.0 来说,这个选择是对的。
四、性能真相:87%、119x,和被 NumPy 反杀的那一局
到了最该冷静的部分。
Mojo 的宣传口径一度非常炸,「比 Python 快 1000 倍」,网上还有引用到 68000 倍的文章。
这些数字不算假,但成立条件很苛刻——纯 Python 的紧凑数值循环,解释器开销占绝对主导的那种。
看 2026 年的实测数字:数值计算场景下,Mojo 的加速比大约在 78 到 119 倍之间。
依然很能打。但离「一千倍」有距离。
真正有参考价值的是横向对比。橡树岭方向的一篇科学计算论文(arXiv:2509.21039,Godoy、Melnichenko 等)拿 Mojo 写的 GPU kernel 和厂商原生实现对了一遍:
在 NVIDIA H100 上,Mojo 的 GPU kernel 平均约为 CUDA 性能的 87%。
在 AMD MI300A 上,测的 stencil 基准基本与 HIP 持平,差异部分归因于寄存器使用。
再往下拆,分工况差别很明显:
内存瓶颈型的 kernel(七点 stencil、BabelStream),Mojo 有竞争力。
计算瓶颈型的(miniBUDE、Hartree-Fock)就露出差距了,卡点主要在 AMD 上的原子操作和两家的 fast-math 优化。
还有一局最有意思的反杀。
在 spectral-norm 这类问题上,NumPy 靠把活儿甩给 BLAS(编译好的 Fortran)跑到了 520 倍,而 Mojo 只有 119 倍。
跟 Rust + PyO3 比呢?两者差在几个百分点之内,不存在数量级差异。
所以诚实的定位是:Mojo 大致坐在 Numba 和 Rust/PyO3 之间。
这个位置有价值,但不是什么圣杯。
翻译成决策:你的热点要是已经在 NumPy 里、或者已经甩给 CUDA kernel 了,换 Mojo 大概率不会有惊喜。热点要是躺在纯 Python 循环里,那提升会很明显。
五、真正的杀手锏:Python 互操作
如果只看性能数字,你会问一句:那我为啥不直接用 Rust?
这就是 Mojo 最聪明的地方——它不让你二选一。
Mojo 能直接调 Python:
from python import Pythondef use_numpy() raises: np = Python.import_module("numpy") array = np.array([1, 2, 3, 4, 5]) print(np.sum(array))
NumPy、PyTorch、Matplotlib,你手上整套 Python 生态都能用,不需要写绑定,不需要包装层。
近期的 nightly 还打通了反向——从 Python 里调 Mojo 函数。这意味着你能给已有的 Python 项目塞一个高性能函数进去,周围代码一行不动。
这才是能落地的采用路径。
别整体重写,挑一个瓶颈:一个训练循环、一个 tokenizer、一个自定义推理 kernel,把它挪到 Mojo,然后从原来的 Python 里 import 回来。
迁移成本跟问题大小成正比,而不是跟你代码库的大小成正比。
26.5 这版还专门优化了这条边界:PythonObject 的算术、比较、成员检查改为直接走 CPython 的抽象协议,官方实测反复做 a + b、a < b 的路径快了约 12 倍。
注意这不是 Mojo 整体性能提升,是精准修了跨语言调用的那道关口。
装起来也简单:uv tool install mojo 或者 pip install mojo,互操作功能需要 Python 3.10 到 3.14。
六、剧情反转:40 亿美元、高通、和一周后的全量开源
现在说这篇里最有戏的部分。
Mojo 的开源是一步一步挪的:2023 年首发时只是免费下载,不带开源许可;2024 年标准库核心部分以 Apache 2.0(附 LLVM 例外)放出;2026 年 1 月整个标准库开源。
编译器一直是闭源的。这也是社区三年来最大的一根刺。
然后来了第一个反转:7 月 29 日,高通完成对 Modular 的收购,价格约 39 亿美元。
社区当场就炸了,担心也很合理——高通自己做 Snapdragon 和 Oryon 芯片,那 Mojo 和 MAX 还能真中立吗?会不会悄悄地就朝自家硅片倾斜了?
紧接着是第二个反转。
8 月 11 日 1.0 发布,编译器仍未开源。一周后,8 月 18 日,Modular 宣布编译器和工具链全量开源,Apache 2.0 附 LLVM 例外。
Apache 2.0 是编程语言和编译器的黄金标准,因为它为各种应用场景提供了极大的灵活性。
LLVM 例外进一步意味着你用 Mojo 编译出来的程序,不需要跟着开源。
到这一步,从语言、标准库到编译器、工具链,整条链子都开了。
但先别急着鼓掌,有一条保留意见得说清楚。
现在是「只读开源」。
Modular 明确表示,暂时还不准备接受编译器和工具链的外部贡献,目标是「今年年底之前」开放。
代码你能看、能 clone、能自己 build,但你提的 patch 现在进不去。
Lattner 在接受 The Register 提问时表示,NVIDIA 和 AMD 仍是重要合作伙伴,他不认为会有问题。
这话可以信,但中立性这东西,得等外部真能自己验证实现和许可、真能往别家硬件的后端里提代码,才算落地。
年底那个节点,比这次开源本身更值得盯。
七、该不该现在上手?三类人三个答案
抛开立场,说点能直接用的判断。
1该上的:你写自定义推理 kernel 或训练热点,已经明确定位到了 Python 瓶颈;或者你在做异构硬件,想要一条不绑死 CUDA 的路;或者你想要接近 Rust 的性能,但不愿意扔掉整套 Python 工具链。
2该等的:你需要 async、模式匹配、代数数据类型、访问控制、包管理,或者一个能用的 profiler。
这条得展开一句。Mojo 官方路线图分阶段:Phase 1(高性能 CPU 与加速器代码)已完成,Phase 2(扩展到系统级应用)正在进行。上面列的那些,大部分还没开工,profiler 官方标注是「未开始」。
而 class、继承这些动态面向对象的东西属于 Phase 3——连门都还没进。
所以别把 1.0 理解成「已经能跟 Rust、C++ 掰手腕了」,它现在的成熟度只覆盖高性能 kernel 和 Python 扩展这个窄口。
3别碰的:你 PyTorch + CUDA 跑得挺舒服,没撞到任何墙;或者高通这层所有权的不确定性,对你团队的构建依赖来说是红线。
顺带提一句 MAX 这边的动静:26.5 简化了安装,支持了 GLM-5.2 和 Nemotron-H(混合 Mamba-2 架构),Kimi 2.5 也能跑了。
Mojo 和 MAX 的边界这次也划清了——部分面向加速器的 API 挪进了新的 max 包。
最后:一门语言的成人礼
这次 1.0 最容易被误读的一点,是把它当成「终于不变了」。
不是。它真正的意思是——从今天起,变化开始有代价了。
在这之前,Mojo 可以随时推翻自己。1.0 之后,每一次破坏性改动都得带上迁移路径、deprecated 别名和 fix-it。
这是成人礼,不是毕业典礼。
而这门语言真正的赌注,也不在语法糖或者那 87% 上。它赌的是:AI 这行需不需要一层不属于任何单一硬件厂商的软件地基。
Lattner 用 LLVM 干成过一次这样的事。这次他要在被一家芯片公司收购之后,再干一次同样的事。
有点意思,也有点悬。
编译器开源了,是个好开头。但真正的答案在年底——外部开发者能不能把 patch 提进去,尤其是往非高通硬件的后端里提。
到那天,中立性才算兑现,而不只是一句表态。
你怎么看?如果为了摆脱 CUDA 绑定,你愿意花时间学一门新语言吗,还是宁可继续等生态成熟?
评论区聊聊。
觉得有用?点个「在看」支持一下 👇
关注我,获取更多技术圈干货
参考资料:Modular 官方博客《Modular 26.5: Mojo 1.0 is here!》与开源公告;arXiv:2509.21039(Godoy、Melnichenko 等,Mojo GPU 科学计算 kernel 性能研究);FOSS Force、Phoronix、The Register、heise online 相关报道;byteiota、XenoSpectrum 技术拆解。部分素材来源于网络,如有侵权请联系删除。