这篇要解决的问题
Python 在 AI 领域的地位无可撼动,但它的性能天花板也是真实的:数值循环慢,绕开的办法是把热点下沉到 C/C++/CUDA——于是每个团队都活在”两种语言”里,Python 负责编排,另一门语言负责性能。Mojo 是 Modular 公司(Chris Lattner 团队,MLIR 的作者们)给出的答案:一门语法长得像 Python、但性能奔着系统编程去的语言,目标是把”原型用 Python、优化用 C++”折叠回一门语言。这篇是观察报告,不是上手教程,重点回答三个问题:它现在真做到了什么、截至 2025 年年中发展到哪一步了、什么样的人值得现在跟进。
2025 年年中的真实状态
先给结论:Mojo 还没到 1.0,但已经过了”PPT 语言”阶段,能写、能跑、能调 Python 库。写作时(2025 年 6 月下旬)的最新版是 25.4(6 月 18 日发布),版本号采用年.序号方案,基本按月演进。几件影响判断的事实:
| 维度 | 现状 |
|---|---|
| 开源状态 | 标准库已于 2025 年 3 月开源(GitHub modular 仓库);编译器本体仍闭源 |
| 平台支持 | Linux 与 macOS(Apple 芯片);Windows 原生不支持,需走 WSL2 |
| 安装方式 | 早期文档的 magic 工具已转向 pixi 包管理器,按项目装,不污染全局 |
| 1.0 时间表 | 未公布;语言仍在快速演进,版本间有破坏性变更 |
| 核心卖点 | GPU/加速器编程与 Python 生态互操作(25.4 起统一容器同时支持 AMD 与 NVIDIA GPU) |
安装走 pixi 路线(具体以 docs.modular.com 的 get-started 为准):
# 安装 pixi(跨平台包管理器),macOS/Linux
curl -ssL https://pixi.sh/install.sh | bash
1. 按项目安装 Mojo,不碰系统 Python
pixi init hello-mojo && cd hello-mojo
pixi add mojo
pixi run mojo --version
1. 运行一个 Mojo 文件(注意用 pixi run 前缀,保证用的是项目内环境)
pixi run mojo hello.mojo
每月一个版本的节奏意味着升级是常态:装好某个 25.x 之后,下一个版本就可能调整你正用到的 API。给观察者的实用建议是”学习跟最新版,代码别长驻”——写完就跑、跑完即弃的实验代码,是当前阶段与 Mojo 相处的正确方式。
语言速览:def、fn 与 struct
Mojo 保留了两套函数声明,这是理解它的钥匙:def 是 Python 风格的动态模式,参数不标类型也能跑;fn 是严格模式,要求类型标注和显式的参数约定——参数按只读借用、可变借用还是值转移,都写在签名里,Rust 式的所有权规则在这里生效(2025 年起这组约定统一为 read/mut/owned 三个关键字,命名本身也说明团队还在打磨语义)。日常脚本用 def,性能代码用 fn:
# hello.mojo:def 模式,与 Python 几乎无差别
def main():
print("Hello Mojo")
struct 是 Mojo 的静态类型载体:成员和方法在编译期确定,性能特征接近 C 的结构体,而 Python 的 class 是运行时字典,这是两者速度差异的根源之一:
@fieldwise_init # 自动生成逐字段构造器,省去手写 __init__
struct Point:
var x: Float64
var y: Float64
fn norm(self) -> Float64:
return (self.x * self.x + self.y * self.y) ** 0.5
def main():
p = Point(x=3.0, y=4.0) # def 里赋值即可,无需声明关键字
print(p.norm()) # 5.0
要注意 Mojo 还不是完整的 Python 超集:早期”兼容全部 Python 语法”的口号,到 2025 年已收敛为”渐进兼容、优先服务 AI 场景”。类继承、动态元编程这些 Python 惯用写法在 Mojo 里没有一一对应物,代码迁移不是复制粘贴的事。
与 Python 互操作
互操作是 Mojo 最扎实的部分:直接 import 现有 Python 包,对象、方法、属性原样可用:
from python import Python
def main():
1. 拿到的是真正的 Python 对象,NumPy 的能力一分不少
np = Python.import_module("numpy")
a = np.arange(5)
print(a) # [0 1 2 3 4]
print(a.sum()) # 计算仍走 NumPy 自己的实现
两个前提写在前面:本机要有可用的 Python 环境(版本匹配细节以官方文档为准);这段互操作代码用 def 写最省心,如果在 fn 里操作 Python 对象,需要用 Python.with_gil 显式拿全局解释器锁。官方自 2023 年起公开的 matmul 逐步优化案例(公开口径,非本站实测)展示的路线是:先用互操作拿到 NumPy 基线,再把热点循环改写成 Mojo 原生代码,靠向量化与并行把速度拉开数量级。这条”先 Python 后 Mojo”的渐进路线,正是它相对其他新语言的差异化打法。
谁该现在跟进,谁该等
值得现在投入的人很具体:做 AI 基础设施、GPU 内核、推理优化的工程师——这是 Modular 的主战场,迭代火力都集中在那里,且你能读懂底层数值代码,破坏性变更的迁移成本对你不高。玩票学语言的也可以跟,标准库开源后代码可读,comptime 和所有权系统都值得一看。
该等的也说得直白:如果你的场景是 Web 后端、脚本、常规数据分析,Python 本身没有性能痛点,Mojo 给不了你什么;指望”生产 Python 代码平滑迁移”的团队,请把这句当反模式——语法像不等于能迁移,生态、调试工具链和语言稳定性都还没到位,现在投入生产的唯一合理位置是愿意陪跑破坏性变更的 AI 性能敏感代码。对大多数中文博客读者,把它放进观察名单、每季度看一眼 changelog,是性价比最高的姿势。
如果决定持续观察,三个信号比任何评测文章都可靠:一看编译器是否开源(决定社区能否自己救自己);二看 1.0 与语言稳定性承诺何时落地(决定值不值得写长寿命代码);三看 AI 场景之外的文档、调试器和报错质量(决定它能不能走出”加速器 DSL”的定位)。这三件事任何一件发生,这篇观察报告的结论就该更新了。
延伸阅读:互操作背后 Python 侧的能力清单见《Python 标准库详解》与《Python 内置函数详解》;def/fn 的类型思路与 Python 函数体系的差异可对照《Python 函数与面向对象》。
版本核实(以官方文档为准):写作时(2025 年 6 月下旬)Mojo 最新版为 25.4(2025-06-18 发布),1.0 未发布、时间表未公布;标准库 2025 年 3 月开源、编译器闭源、Windows 需 WSL2、pixi 安装路线、@fieldwise_init、def/fn 双模式、Python 互操作均为当时已发布事实;具体 API 以 docs.modular.com 当前文档为准。