Mojo:为 AI 时代而生的系统编程语言——是什么、凭什么「既要又要」

Chris Lattner 打造的 AI 时代系统级语言。从 mojolang.org 官网看 Mojo 全貌:统一/高效产出/简单高性能的设计理念,编译期元编程、内存安全与所有权、内置 GPU 编程、Python 互操作四大核心特性,以及 1.0 稳定版与新官网上线意味着什么。

  • AI
  • Mojo
  • 编程语言
  • ChrisLattner
  • MLIR
  • GPU
  • 系统编程

mojolang.org 是编程语言 Mojo 的官方网站。 如果你常混 AI 圈,大概早就被"Mojo 比 Python 快 90000 倍""Chris Lattner 的新语言"这类标题轰炸过。 2026 年 8 月,Mojo 正式发布了 1.0 稳定版,也把官方文档整体迁移到了这个新域名。 这篇就带你完整看一遍 Mojo 是什么、它想解决什么问题、有哪些关键特性,以及 1.0 意味着什么。

一、先认识它:为「AI 时代」而生的系统级语言

Mojo 不是又一款"Python 提速器",而是一出生就冲着整个 AI 计算栈去的系统编程语言。 官方的一句定位很直白:

"The systems language for the AI era"——AI 时代的系统级语言。Write fast code for diverse hardware (spanning CPUs, GPUs and more) without vendor lock-in, in a language that's both user friendly and memory safe.

翻译过来就是:用一种语言,同时搞定 CPU、GPU 以及未来各种各样的加速器, 不绑定任何硬件厂商,且同时做到"上手友好"和"内存安全"。

它由 Modular 公司开发,背后的灵魂人物是 Chris Lattner—— LLVM 之父,也是 Swift 语言的主要设计者。另一个联合创始人是 Tim Davis。 所以从血统上讲,Mojo 天生就带着"编译器领域最顶尖的工程基因"。

为什么叫 Mojo?官方解释说,Mojo 有"魔法魅力 / 神奇力量"的意思——这个名字正好寄托了 它想给开发者带来的"魔法":解锁异构加速器等 AI 时代核心硬件的全新编程方式。

它和 Python、Rust、C++ 是什么关系?

一句话概括它在语言生态里的位置:

PythonRustC / C++Mojo
语法简洁、易上手偏陡峭繁琐Python 风格
性能慢(解释/GC)接近 C原生最快档接近 C
内存安全靠 GC所有权系统手动所有权 + 借用
硬核异构编程靠库较新要人肉降级语言内置 GPU/加速器

简而言之:Mojo 想做的,是拿 Python 的语法和上手体验,去换 C 级别的性能, 再补上 Rust 式的内存安全,最后把 GPU 编程也直接揉进语言里。

二、为什么需要 Mojo:AI 软件栈太复杂的痛点

要理解 Mojo,得先理解它诞生的那个"问题"。Modular 在做自家的 MAX 平台时发现, 横跨整个 AI 软件栈(从数据中心到边缘、从 CPU 到 NPU)编程实在是太复杂了

今天的现状是割裂的:

  • 写 CPU 高性能代码,得用 C++、Rust 这一类系统语言;
  • 写 GPU 内核,得再学 CUDA 那套(或别的厂商 DSL);
  • 写 AI 算法,大家又都挤在 Python 里,图个方便;
  • 一旦要上 TPU、NPU、各种专用 ASIC,又得换一套工具链。

结果就是:同一个项目,往往要横跨两三门语言、好几套工具链、还有买家绑定的风险。Mojo 想当那个"统一语言"——从数据中心一路写到边缘,从 CPU 写到 NPU, 同一个语言都能覆盖,还不用被某个硬件厂商锁死。

三、核心特性:Mojo 凭什么"既要又要"

官网用三个词概括了设计理念:Unified(统一)、Productive(高效产出)、Simply performant(简单又高性能)。 落到具体实现上,就是下面这几大块。

1. 编译期元编程(Compile-time metaprogramming)

这是 Mojo 最"硬核"也最独特的能力。它把编译期的编程能力和运行时代码用同一种语言来表达, 而不是像 C 那样搞一套割裂的宏系统。用官方的话说:

"Mojo's compile-time programming uses the same language as your runtime code, so specialization and optimization feel like regular programming——not a separate macro system."

比如用 comptime 做编译期反射,自动给任意结构体生成泛化的比较逻辑:

# Generic struct equality using compile-time reflection.
def __eq__(self, other: Self) -> Bool:
    comptime r = reflect[Self]()

    comptime for i in range(r.field_names().size):
        comptime assert conforms_to(r.field_types()[i], Equatable)
        if r.field_ref[i](self) != r.field_ref[i](other):
            return False
    return True

还有编译期条件、编译期循环、带参数的编译期特化函数(有点像 C++ 的模板,但用的是普通函数语法)等等。 这套机制让 Mojo 能在MLIR(Modular 团队在 LLVM 生态里主导的多层中间表示框架) 上实现强大的性能特化。

2. 内存安全 + 所有权(Ownership)

和 Rust 一样,Mojo 用所有权和借用来管理对象生命周期,而不是靠运行时垃圾回收(GC)。 这意味着很多内存错误在编译期就被拦下来了,同时没有 GC 带来的性能开销。

Mojo 用 ^(transfer sigil)表示转移所有权:

a = [1, 2, 3]
b = a^      # 把 a 的所有权转移给 b

想引用而不复制,用 ref;还提供了四种指针类型来控制力的粒度,从普通指针到UnsafePointer,让你在"安全"和"极致控制"之间按需选择。

3. 内置 GPU 编程(GPU programming)

这是 Mojo 相当有野心的一个点。不用学 CUDA,不用另起一个 DSL, 直接在 Mojo 里写 GPU 内核,跑在 CPU 或 GPU 上用的是同一门语言。官网给的例子很直观:

def vector_add(
    a: TileTensor[float_dtype, type_of(layout), element_size=1, ...],
    b: TileTensor[float_dtype, type_of(layout), element_size=1, ...],
    result: TileTensor[mut=True, float_dtype, type_of(layout), element_size=1, ...],
):
    var i = global_idx.x
    if i < layout.size():
        result[i] = a[i] + b[i]

MAX 加速器库还提供了设备管理、GPU 抽象、张量运算等 API。万一你碰到特别独特的硬件, 还能一路降级到 PTX 这类底层汇编。底层硬件降级方面,Mojo 依托 MLIR/LLVM, 天然就容易扩展到任意新硬件后端。

4. Python 互操作(Python interop)

Mojo 不是要把 Python 一脚踢开,而是"在开发者现在所在的地方接住他"。 你可以直接 import Python 库,把性能敏感的路径用 Mojo 重写加速, 然后从原型一步步平滑过渡到生产——不用一次性推倒重写。官网用 matplotlib 画图的例子就很能说明问题:

# Using matplotlib to plot Mojo data.
def make_plot() raises:
    var values = List[Float64](length=40, fill=0.0)
    rand(values, max=200)
    var np_values = copy_to_numpy_array(values)
    var pyplot = Python.import_module("matplotlib.pyplot")
    pyplot.plot(np_values)
    pyplot.xlabel("Sample")
    pyplot.ylabel("Value")
    pyplot.savefig("plot.png")

Mojo 也支持与 C/C++(extern "C")互操作,通过 ffi 模块、@export装饰器等方式。反过来,Python 也能把 Mojo 代码当模块加载调用。

5. 强类型 + 更贴近硬件的类型系统

与 Python 不同,Mojo 是强类型的——变量要么带注解、要么由首次赋值推断,之后不能随意换类型。 它提供的整数、浮点类型直接对应机器级位宽,能用在 SIMD 加速向量里; 而 Python 的整数是任意精度的"对象",天生就慢一截。

Mojo 用 struct(而不是 Python 的 class),借助 traits(类似 Rust 的 trait) 来赋予 Copyable、Comparable 等通用行为,还有 RegisterPassable 这种能放进机器寄存器的类型,都是为了性能而生。

四、1.0 是个里程碑:从"实验"到"生产可用"

Mojo 最早在 2023 年 5 月以实验性语言的身份亮相,当时几乎被当成"Python 的超集 / Python++"。 经过三年多的高速迭代,2026 年 8 月 10 日,Modular 在 Modular 26.5 版本里正式发布了Mojo 1.0

1.0 的意义,官方说得非常明确——向后兼容 + API 稳定

  • 未来 1.x 版本将以"增量添加"为主,不再破坏现有兼容性;
  • 标准库开始把一批 API 标记为 stable,承诺不会被随意改动或删除;
  • 核心语言与标准库稳定部分开始遵循语义化版本(SemVer)
  • 标准库在 Apache 2.0(带 LLVM 例外)许可下完全开源,已收到 1100+ 个社区 PR

26.5 这一版还带来了一些具体改进:更接近 Python 的 lambda 闭包语法、 内存安全诊断(帮你找出失效引用)、新的 Pointer 类型、更规范的 var 声明, 以及一个更可靠的新 LSP 语言服务器(给 IDE 集成用的)。

说句题外话:Mojo 1.0 也是被 Qualcomm(高通)在 2026 年年中收购 Modular 之后的重要一步, 高通要借它的 AI 软件栈打通"边缘到云端"的全套生态,Mojo、MAX、Modular Cloud 都继续以独立品牌运营。

五、路线图:1.0 之后去哪

官方把 Mojo 的演进画成了三个阶段:

阶段状态内容
Phase 1已完成高性能系统与加速器编程(CPU→GPU→更多)
Phase 2进行中系统应用编程:更好的工具链与打包,支撑更广生态
Phase 3规划中动态面向对象编程:支持更多 Python 动态特性(类、继承、弱类型变量)

未来计划里还有 async 异步编程、模式匹配、tagged union(标签联合)等。 Mojo 的标准库已经完全开源,团队也承诺在 2026 年内开源 Mojo 编译器

有几点值得留意:Mojo 目前还不是 Python 的"即插即用替代品"——它走的是自己的系统语言方向, 强类型、所有权、无 GC。也没有一条从 Python/Rust 自动迁移到 Mojo 的现成路径。 现阶段最务实的用法,是把 Python 生态里那些性能敏感的路径(AI 核心算子、GPU 内核、 HPC、数据预处理/后处理)用 Mojo 来写,Python 负责其余部分。

六、怎么上手

想动手玩一玩,门槛并不高:

  • 安装:支持 Mac 和 Linux 原生,Windows 走 WSL。用 pip / conda 装 mojomojo-compiler 包即可。SDK 自带 CLI、编译器、标准库、LSP、调试器(LLDB)、代码格式化器和 REPL。
  • IDE:官方有开源的 VS Code / Cursor 扩展(支持远程 SSH 和 dev container)。
  • 文档:mojolang.org 上手册、教程、FAQ 都很全,还支持给任意文档 URL 加 .md 直接看 Markdown 版。
  • 性能要求高一点的 GPU 开发:装 max 包,带 MAX 框架和 Mojo 一起。
  • 社区:官方 Discord、论坛都很活跃,标准库 GitHub 仓库欢迎贡献。

小结

Mojo 是一个野心很大的项目:想用一门语言统一整个 AI 时代的异构硬件编程。 它拿 Python 的语法做壳,用 Rust 式的内存安全兜底,靠 MLIR 撑起编译期元编程和极致的性能特化, 还内置了 GPU 编程和 Python 互操作。

2026 年的 1.0 稳定版(连同新上线的 mojolang.org 官方网站) 标志着它从"实验玩具"正式进入了"生产可用"阶段——向后兼容、API 稳定、标准库开源、编译器也快要开源。 至于它能不能真的统一 AI 软件栈,还要看生态能不能长起来;但至少,一门能让你用 Python 的手感写出 C 级性能、还能顺手写 GPU 内核的语言,本身就足够让人期待了。