Mojo 1.0 正式发布:AI 时代的系统编程语言走向稳定

2026 年 8 月 11 日,Modular 公司宣布 Mojo 编程语言正式发布 1.0 版本。这是一次从 2023 年首次公开至今、历时三年的里程碑发布。Mojo 定位为"AI 时代的系统编程语言",由 LLVM 和 Swift 语言之父 Chris Lattner 主导设计,核心目标是统一 CPU、GPU 和各类加速器上的高性能编程体验。

Mojo 1.0 发布

1.0 意味着什么:稳定性承诺

Mojo 1.0 的核心意义不在于单个功能突破,而在于稳定性承诺。在此之前的预览阶段,Modular 以极高频率迭代语言特性,导致社区开发者难以维护长期项目。1.0 之后,Modular 承诺在 1.x 时间段内,语言变更将以增量添加为主。破坏性修改仍可能发生,但会按照 C++ 等成熟语言的演化标准进行管理,每个破坏性修改都会附带废弃别名和编译器自动修复提示(fix-it),使迁移过程机械化。

这条稳定性承诺有实际背书:Modular 自身的商业基础设施 MAX 推理引擎和 Modular Cloud 平台每天都在生产环境中使用 Mojo。这意味着 Mojo 不再只是一个实验性语言,而是一个被自身创造者重度依赖的生产工具。

社区方面,自标准库开源以来,近 200 名贡献者提交了超过 1,100 个 Pull Request,修改了超过 20 万行代码。另有超过一千名开发者通过提交 Issue 影响了语言的发展方向。

语言设计:Python 语法,系统级控制

Mojo 采用 Python 家族的语法风格。选择 Python 作为基础的原因在于它是全球最流行的编程语言之一,尤其在 AI 领域占据绝对主导地位。Python 拥有简洁可读的语法、较小的核心语言体积、强大的元编程能力和作为"万能胶水"连接不同系统的角色。

但 Mojo 并非 Python 的简单超集。在设计哲学上,它更像 Python 语法外衣下的现代系统编程语言,融合了 Rust、Swift、Zig 和 C++ 的设计理念:

  • 静态类型系统:编译期类型检查,支持参数化类型(parameterized types)和依赖类型
  • 内存管理控制:开发者可以精确控制值传递的约定(borrowed/inout/owned),而非依赖垃圾回收
  • 编译期元编程:通过 comptime 关键字,可以在编译期执行任意 Mojo 代码进行代码生成,这比 C++ 的模板元编程或宏更强大且更安全
  • 零开销抽象:面向 GPU kernel 开发设计的特性集合,包括 SIMD 类型、tensor 类型、数据布局控制等

1.0 版本的核心技术变更

Lambda 表达式

Mojo 1.0 引入了 Python 风格的 lambda 表达式,支持匿名单表达式闭包。语法为 lambda (x: Int) {} -> Int: x + 1。与 Python 不同的是,参数需要括号包裹并标注类型。无捕获的 lambda 是一个函数值,与按名引用的 def 等价;有捕获的 lambda 则是运行时闭包实例。

内存安全:内部引用追踪

1.0 引入了一个实验性特性"内部引用源"(interior origins)。以 List 为例,获取元素的引用现在绑定到列表的"内部源"而非整个列表的源。当调用 append()pop() 可能触发内存重新分配时,编译器会拒绝持有旧引用的代码:

mojo
var list = [1, 2, 3]
ref elem = list[0]
list.append(4)  # 可 能触发重分配,elem 被标记为失效
print(elem)      # 编译错误:使用了已失效的内部引用

这解决了一类经典的内存安全问题:容器在增删元素后底层存储迁移,导致指向旧位置的引用悬空。

指针类型统一

此前 PointerUnsafePointer 是两个独立类型。1.0 将它们合并为单一的 Pointer 类型,不安全性标记从类型级别下移到操作级别。同时 UnsafeAnyOrigin 的获取变得更困难:隐式宽化已被废弃,结构体字段不再能隐藏一个不安全源。

Python 互操作性能提升

PythonObject 的算术、比较和成员运算符现在通过 CPython 的抽象协议直接分派,而非走 Python 级别的属性查找加绑定方法调用。这条互操作热路径的提速约为 12 倍。

命名收敛

1.0 完成了最后一轮语言简化和清理:

旧名称新名称说明
sizelength全局统一
InlineArrayArray列表表达式默认构造 Array 而非 List
StringSliceStringSpan命名精确化
ImplicitlyDestructibleDeinitable析构方法统一为 __deinit__()
readimm值传递约定更名
IntScalar[DType.int] 的别名统一数值类型体系

显式优于隐式

多个原本静默推断的规则现在需要显式书写:变量声明必须使用 var 关键字(隐式声明已废弃并产生警告);方法的 self 参数必须标注 Self 类型;裸 **kwargs 必须写为 var **kwargs。导入系统也做了全面重构,名称解析规则更一致和可预测。

GPU 编程边界

IntUInt 不再实现 DevicePassable trait,不能直接传递给 GPU kernel。这是因为它们是平台宽度的索引类型,在主机和设备宽度不一致时会导致编译错误。开发者需要使用固定宽度类型如 Int32 替代。与加速器编程相关的标准库 API 迁移到了新的 max Mojo 包中。

性能定位:从 35,000x 到 4x

Modular 官方的标题级基准测试结果是:Mojo 在 Mandelbrot 集合计算上比 Python 快 35,000 倍。这个数字来自 Modular 自己的技术博文,采用了一个对 SIMD 和多线程极其友好的计算密集型任务。

在更贴近生产环境的场景中,数字差异很大。第三方基准测试(BSWEN)显示,在 JSON 解析管线这类 I/O 密集型工作负载上,Mojo 相对 Python 的加速比约为 4 倍。在数值计算密集型场景(如 N-Body 模拟),加速比可达 78-119 倍。

这两个数字都是诚实的。它们测量的是完全不同的东西:Mandelbrot 测试的是纯 SIMD 计算和编译器优化的极限,JSON 管线测试的是标准库成熟度和 I/O 路径效率。对于大多数 Python 开发者而言,Mojo 的实际价值在于在计算密集型热路径上获得 C 级性能,同时保持 Python 风格的开发体验。

三阶段路线图

Mojo 的发展规划分为四个概念阶段(与版本号不直接对应):

Phase 0(已完成):基础语言搭建,包括核心解析器、内存类型、函数、结构体、初始化器和参数约定。

Phase 1(已完成):从"原型 kernel DSL"发展为系统编程和高性能计算的可行基础。这一阶段完成了参数化类型系统、编译期元编程、traits 系统、Python 互操作、GPU 可编程性抽象、SIMD 和数值类型。Phase 1 的结束点是开源 Mojo 编译器的自然时机。

Phase 2(进行中):深化核心系统编程能力,同时扩展生态系统。计划中的功能包括一等 async 支持、代数数据类型与模式匹配、存在类型/动态 trait、结构体扩展、初步分布式编程支持、访问控制(如 private 修饰符)以及跨编译和包管理工具链。

Phase 3(未开始):支持 Python 的核心动态特性,包括无类型变量、类、继承等。Modular 明确表示不追求逐功能匹配 Rust 或 C++,目标是保持语言相对小巧和可教学。

开源计划

Mojo 的标准库已经开源,但编译器和工具链仍为闭源。Modular 承诺在 2026 年内开源 Mojo 编译器。目前已开放的是标准库和一组 AI Agent Skills(github.com/modular/skills),涵盖新项目创建、GPU 编程、跨语言移植等场景,在 skills.sh 上已获得超过 7,200 次下载。

Chris Lattner 在 LLVM、Clang 和 Swift 上的履历让 Mojo 值得关注,但语言能否成功最终取决于生态。Mojo 面对的挑战包括标准库仍然偏薄、社区规模相比 Python/C++ 尚小、以及编译器尚未完全开源带来的信任问题。1.0 的稳定性承诺是回应这些问题的第一步。

快速上手

安装 Mojo 1.0:

bash
uv pip install --upgrade mojo

如需 MAX 推理框架:

bash
uv pip install max[all]

Modular 将于 8 月 18 日在旧金山举办 ModCon 大会,届时会分享 Mojo、MAX 和开源计划的更多细节。

来源: