Chris Lattner 与 Modular 的故事
从 LLVM 到 Swift,再到 Mojo
要理解 Mojo,必须先了解它的创造者 Chris Lattner——软件史上最具影响力的编译器工程师之一。
2000 年,Lattner 在伊利诺伊大学读研究生时开始了 LLVM(Low-Level Virtual Machine)项目。LLVM 彻底改变了编译器世界:它提供了一套模块化的编译器基础设施,让开发新编程语言的成本大幅降低。如今,Clang(C/C++)、Swift、Rust、Julia、Crystal 等几十门语言都建立在 LLVM 之上。
2010 年,Lattner 加入苹果,带领团队设计了 Swift 语言——一门为 iOS/macOS 开发设计的现代化语言。Swift 的成功证明了他能够设计出既有高性能又有良好开发体验的语言。
2017 年,Lattner 加入 Google Brain,参与 MLIR(Multi-Level Intermediate Representation)编译器框架的设计——这是专门为 AI/ML 工作负载优化的下一代编译器基础设施。
2022 年,Lattner 创立 Modular 公司,目标是解决 AI 基础设施的核心困境。Mojo 语言于 2023 年 5 月公开亮相,震惊了技术界。
Mojo 的诞生背景:AI 的双重困境
当前 AI 开发面临一个根本性的分裂:
- 研究侧:使用 Python,生态丰富(PyTorch、NumPy、Hugging Face),代码简洁易写,但速度慢
- 生产侧:必须用 C++/CUDA 重写核心计算,才能满足推理延迟要求,但开发效率极低
这道鸿沟造成了巨大浪费:研究者用 Python 证明了算法可行性,工程师再花费数月用 C++/CUDA 重新实现,才能部署到生产。Mojo 的目标是消灭这道鸿沟。
用一门语言同时满足:Python 的易用性(超集,现有代码直接运行)+ C++ 的性能(MLIR 编译、SIMD、零开销抽象)+ 现代语言的安全性(所有权系统,内存安全)。
Mojo 与主流语言的对比
| 特性 | Python | C++ | Rust | Mojo |
|---|---|---|---|---|
| 语法易用性 | 极高 | 低 | 中等 | 极高(Python 超集) |
| 运行性能 | 慢(解释执行) | 极快 | 极快 | 极快(MLIR 编译) |
| 内存安全 | GC 保证 | 不保证 | 编译期保证 | 编译期保证(所有权) |
| SIMD 支持 | 间接(NumPy) | intrinsics/编译器自动 | std::simd(实验性) | 内置一等公民 |
| Python 互操作 | — | pybind11(复杂) | PyO3(较复杂) | 原生无缝 |
| AI/ML 生态 | 丰富 | libtorch 等 | 有限 | 继承 Python 生态 + MAX Engine |
| 学习曲线 | 平缓 | 陡峭 | 陡峭 | 平缓(对 Python 开发者) |
核心名词解释
SIMD[DType, size],开发者可以直接操控向量寄存器。安装 Mojo 开发环境
方法一:Magic 包管理器(推荐)
Magic 是 Modular 官方推荐的安装方式,一键搞定 Mojo 工具链和所有依赖。
# macOS / Linux 安装 Magic
curl -ssL https://magic.modular.com/e106123febc49f6a83fbe7a2d6930c64 | bash
# 重新加载 shell 配置
source ~/.bashrc # 或 source ~/.zshrc
# 验证 Magic 安装
magic --version
# 使用 Magic 安装 Mojo
magic install mojo
# 验证 Mojo 安装
mojo --version # Mojo 24.x.x (...
方法二:通过 Modular 官方 SDK
# 安装 Modular CLI
curl https://get.modular.com | sh -
# 登录 Modular 账户(需注册)
modular auth login
# 安装 MAX(含 Mojo)
modular install max
# 配置环境变量
export MODULAR_HOME="$HOME/.modular"
export PATH="$MODULAR_HOME/pkg/packages.modular.com_mojo/bin:$PATH"
截至 2024 年,Mojo 原生支持 macOS 和 Linux。Windows 用户请使用 WSL2(Windows Subsystem for Linux 2)安装 Ubuntu 22.04,然后按 Linux 步骤操作。
创建第一个 Mojo 项目
# 创建新项目
magic init hello-mojo --format mojoproject
cd hello-mojo
# 项目结构
hello-mojo/
├── mojoproject.toml # 项目配置(类似 Cargo.toml)
├── .magic/ # Magic 虚拟环境
└── hello.mojo # Mojo 源文件
# 运行 Mojo 文件(解释模式)
mojo hello.mojo
# 编译为二进制(生产模式)
mojo build hello.mojo -o hello
./hello
第一个 Mojo 程序
Hello, Mojo!
# hello.mojo
# Mojo 完全兼容 Python 语法
def main():
print("Hello, Mojo! 🔥")
# Mojo 特有:强类型变量声明
var x: Int = 42
var name: String = "Mojo"
print(name, "的答案是", x)
Python 风格与 Mojo 风格并存
# Mojo 支持两种函数定义风格
# 1. Python 兼容风格(def):动态类型,兼容性最好
def python_style(x, y):
return x + y
# 2. Mojo 原生风格(fn):严格类型,编译期优化
fn mojo_style(x: Int, y: Int) -> Int:
return x + y
def main():
# 两种风格都能调用
print(python_style(3, 4)) # 7
print(mojo_style(3, 4)) # 7,但 mojo_style 会被编译器优化
def:与 Python 完全兼容,参数可以是动态类型,允许隐式转换,运行时灵活。
fn:Mojo 原生函数,必须声明参数类型和返回类型,编译器可做完整优化(内联、SIMD 等),性能远超 def。
建议:新代码用 fn,对接 Python API 时用 def。
Mojo Playground 在线体验
在安装本地环境之前,可以先在 Mojo Playground 在线体验:访问 playground.modular.com,这是一个基于 JupyterLab 的在线环境,预装了 Mojo 内核,无需任何安装即可运行 Mojo 代码。
.mojo 扩展名,也支持用火焰表情 .🔥 作为扩展名(这是真实支持,不是玩笑)。正式项目建议使用 .mojo。性能初体验:斐波那契对比
# fibonacci.mojo — 展示 fn 函数的性能
fn fibonacci(n: Int) -> Int:
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
from time import now
def main():
var start = now()
var result = fibonacci(40)
var elapsed = now() - start
print("fibonacci(40) =", result)
print("耗时:", elapsed // 1_000_000, "ms")
# Mojo (fn): ~1-2ms
# Python def: ~30000ms(30秒)
# 差距约 10000-30000 倍
Mojo 官方宣传的「68000 倍」是针对特定的矩阵乘法 SIMD 优化案例,使用了 vectorize + parallelize + 手动调参。普通的 fn 函数比 Python def 快 10~100 倍左右。真正的性能飞跃来自第 5、6 章介绍的 SIMD 和并行化技术。
Mojo 的来源:Chris Lattner(LLVM/Swift 作者)创立 Modular,Mojo 旨在消灭 AI 开发中 Python 易用性与 C++ 性能的鸿沟。
关键概念:MLIR(多级中间表示,AI 编译器基础)、LLVM(底层代码生成)、SIMD(单指令多数据并行)。
安装方式:推荐 Magic 包管理器,一键安装 Mojo 工具链。
两种函数:def 兼容 Python,fn 强类型、高性能,是 Mojo 性能优化的基础。
文件格式:.mojo 或 .🔥,可解释运行也可编译为二进制。