这张路线适合谁
适合两类人:做 AI 基础设施、GPU 内核、推理优化方向,需要提前储备系统语言素养的工程师;以及想借 Mojo 理解”Python 外衣下的系统语言长什么样”的观察者。前置要求一句话说死:会 Python 到函数与面向对象的层面(站内 Python 系列从环境搭建到异常处理都有覆盖,缺哪补哪),不要求 C/C++ 背景,但要接受”自己想清楚内存”的工作方式。Windows 用户全程走 WSL2,原生 Windows 不受支持。也要说不适合谁:指望立刻在生产系统用上 Mojo 的团队——1.0 未发布、时间表未公布,这条路线的终点不是”精通一门生产语言”,而是”能判断 Mojo 何时值得认真投入,同时收获实打实的性能工程方法论”。时长口径按每天 1-2 小时业余学习估算。
| 阶段 | 目标 | 阶段产出 | 预估时长 |
|---|---|---|---|
| 0 观察与上手 | 判断值不值得投入,跑通第一段代码 | pixi 项目里跑通 hello.mojo 与一段 NumPy 互操作 | 3-5 天 |
| 1 语言核心 | def/fn、struct、所有权三板斧 | 一组 fn + struct 的统计函数库 | 2 周 |
| 2 编译期与 SIMD | alias、参数化与向量化思维 | 标量与 SIMD 两版点积、一个直方图统计 | 1-2 周 |
| 3 并行与实验方法 | parallelize 与基准测试纪律 | 复现 matmul 四步实验,写一份结果笔记 | 2 周 |
| 4 生态与追踪 | 读源码、跟版本、定观察点 | 一个标准库模块的源码笔记 + 版本变更记录 | 持续 |
阶段 0:观察与上手
学什么:pixi 安装路线、pixi run mojo run/repl 的日常用法、Python 互操作的第一手体验。安装与定位开山篇已讲完,不在此展开。资源:《Mojo 观察报告》(开山篇,安装、现状与判断依据)+ 官方 get-started 文档。阶段产出:一个 pixi 项目里,hello.mojo 正常输出,再用 Python.import_module("numpy") 对一个数组求和打印。验收标准是这两段代码都能跑,且你能回答”互操作的计算走的是谁的实现”。常见卡点:Windows 装不上——原生不支持,走 WSL2;版本升级后旧代码报错——每月一版的演进节奏下这是常态,先看 changelog 再动代码。
阶段 1:语言核心
学什么:def 与 fn 的分工、参数约定 read/mut/owned/out、struct 与 @fieldwise_init、trait 的存在意义、函数重载(同一函数名按参数类型分发,是 Mojo 的日常写法)、raise 与 try/except。资源:《Mojo 语法要点》讲”为什么这样设计”,《Mojo 基础知识参考字典》当条目索引随查随用,官方 manual 补细节。阶段产出:一个 Stats struct——持有 List[Float64],add 用 mut 方法累加,mean/variance/quantile 用只读方法计算,重载一个接受 List[Int] 的版本,main 里构造、累加、打印三个指标。验收标准:全部用 fn 实现、编译零错误,并且说得出每个参数为什么用这个约定。常见卡点:fn 参数赋值报错——回头读参数约定表,先问自己要的是”改副本、改原值还是接管”;想给 struct 找父类——没有继承,用 trait 与组合替代。
阶段 2:编译期与 SIMD
学什么:Float64 是宽度 1 的 SIMD 别名这件事的全部推论——宽度参数化、alias 与 @parameter if、方括号编译期参数与圆括号运行时参数的分界。资源:语法要点的 SIMD 与 alias 两节、字典的 Int/SIMD 条目、官方 SIMD 手册。阶段产出:同一个点积函数写标量版与 SIMD 版(宽度先用 4),外加一个值域分桶计数的直方图函数。验收标准:两版结果逐元素一致;把宽度改成 8、再故意用一个 var 变量当宽度时,编译报错你能自己定位到”编译期值进不了方括号”。常见卡点:SIMD 混算报错——不同宽度/精度要显式 cast;@parameter if 条件用了运行时变量——那是普通 if 的活,编译器会拦住你,听它的。
阶段 3:并行与实验方法
学什么:parallelize 与 @parameter 闭包、以及比 API 更重要的基准纪律——预热、多次取最小、防死代码消除、环境记录表。资源:《用 Mojo 加速矩阵乘法》就是这一阶段的完整骨架,四步演进的代码与验证流程直接复跑。阶段产出:在你的机器上复跑 matmul 实验,填一张环境表(CPU、核数、OS、mojo –version),记录四个版本的耗时与误差,写一份自己的结果笔记。验收标准:加速版与朴素版 max_abs_err 为 0 或浮点噪声级;趋势方向与预期一致——循环重排有提升、并行随核数增长、SIMD 再上一档。常见卡点:倍数远小于预期——先查线程数是否吃满、再查是否撞上内存带宽,最后才怀疑代码;每次结果不一样——没预热、没取最小值,回到实验纪律三条。
阶段 4:生态与追踪
学什么:标准库的模块版图(collections、memory、algorithm、python 一族)怎么读,以及怎么跟一个快速演进的语言共处。资源:GitHub 上的 modular/modular 仓库(标准库已开源,源码可读)、docs.modular.com、官方论坛的 roadmap 帖与社区讨论。阶段产出:挑一个模块(建议 memory)通读源码,写一篇笔记回答”它用 UnsafePointer 保证了什么、没保证什么”;每月扫一次 changelog,把破坏性变更记进同一条时间线。验收标准:能向别人解释清楚两个 API 的行为边界。常见卡点:API 每月变——笔记全部标注版本号,别写”永远如此”;不知道该观察什么信号——开山篇给过三个:编译器是否开源、1.0 与稳定性承诺何时落地、AI 场景之外的文档与调试器质量。
阶段之间的检验问题
每个阶段结束,用四个问题自查是否可以往前走,答不上来就停一档。进入阶段 1 前:”def 和 fn 里改一个参数,分别发生什么?”——答不出说明两套函数声明的分工还没建立。进入阶段 2 前:”为什么 fn 参数赋值会报错、mut 关键字改的是什么?”——这是所有权概念的地基。进入阶段 3 前:”SIMD 宽度参数为什么必须用 alias 装?”——编译期与运行时两个世界的分界线。进入阶段 4 前:”V2 的并行版为什么天然无数据竞争?”——数据划分决定并行正确性,这是读标准库并行代码的钥匙。四个都答得上,这条路线的主干你就已经握住了;答不上的时候,回上一阶段的产出物里翻代码,比重读文章有效。
避坑清单
不要把迁移 Python 项目当练手——语法像不等于兼容,class 继承、动态元编程没有对应物,代价是项目卡死在”翻译不过去”的地方,白付一次迁移成本。不要跳过参数约定直接抄代码——read/mut/owned 是 Mojo 的地板,绕过它的人会在第一个 fn 参数上撞墙,撞完还不知道为什么。不要拿官方倍数当预期——35,000x 的口径是纯 Python 基线加特定硬件,基线选错结论就废了。不要在 1.0 前写长寿命代码——版本间有破坏性变更,长寿命代码等于持续付迁移税。不要追每个版本——每月一版,实验代码用完即弃,只有笔记和结论值得沉淀。
学完之后
走完五个阶段,你手上会有:一组亲手写的 fn/struct/SIMD/并行代码、一份自己机器上的 matmul 实验笔记、一条标了版本号的演进时间线。实战篇的 matmul 骨架可以继续往两个方向加压:把矩阵分块(tiling)加上去,或把 Float64 换成 Float32 观察带宽变化——两件事都只改代码不改方法论。真正的分岔口在 1.0:开山篇的三个观察信号任何一个落地,这条路线就从”素养储备”升级为”生产投入”;在那之前,把节奏保持在”每月看一眼 changelog”的成本线上,是最划算的持仓姿势。
版本核实(以官方文档为准):路线按 25.4(2025-06-18 发布)时点编排——pixi 安装路线、标准库已开源(编译器未开源)、Windows 需 WSL2、参数约定 read/mut/owned/out、@fieldwise_init、函数重载、SIMD 参数化、algorithm 模块 parallelize 均为该时点事实;1.0 未发布、时间表未公布;各阶段涉及的 API 细节以 docs.modular.com 当前文档为准,外部资源未逐条核实链接时效。