Chapter 01

Mojo 简介与开发环境

了解 Chris Lattner 与 Mojo 的诞生故事,安装 Magic 工具链,写下第一个 Mojo 程序

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 证明了算法可行性,工程师再花费数月用 C++/CUDA 重新实现,才能部署到生产。Mojo 的目标是消灭这道鸿沟。

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 开发者)

核心名词解释

MLIR
Multi-Level Intermediate Representation,多级中间表示。由 Google 开发(Chris Lattner 主导),是下一代编译器基础设施。与 LLVM IR 只有一层中间表示不同,MLIR 支持多个抽象层次,可以同时表达高层算法语义(如张量操作)和底层硬件指令(如 AVX512 SIMD),非常适合 AI 工作负载的优化。Mojo 的编译器后端基于 MLIR。
LLVM
Low-Level Virtual Machine,底层虚拟机(现已超越原名含义)。是业界最成熟的编译器基础设施,提供代码优化和机器码生成。Clang、Rust、Swift 都使用 LLVM 后端。Mojo 通过 MLIR → LLVM 的路径生成最终机器码,并利用 LLVM 的成熟优化 passes。
SIMD
Single Instruction Multiple Data,单指令多数据。CPU 的一种并行计算能力:一条指令同时对多个数据元素执行相同操作。例如,AVX2 指令集的 256-bit 寄存器可以同时对 8 个 32-bit 浮点数做加法,相当于 8 倍吞吐量。SIMD 是现代 CPU 性能的核心来源,NumPy/PyTorch 的高性能正是依赖底层的 SIMD 指令。Mojo 将 SIMD 作为内置一等公民类型 SIMD[DType, size],开发者可以直接操控向量寄存器。
系统编程
指对计算机底层资源(内存、CPU、操作系统接口)进行精确控制的编程范式。与应用层编程不同,系统编程语言(C/C++/Rust)不依赖垃圾回收,允许手动管理内存,可以编写操作系统内核、驱动程序、运行时库等基础设施。Mojo 将系统编程能力引入 AI 领域,让开发者能在 Python 风格的代码中实现 C 级别的内存控制。
MAX Engine
Modular 公司的 AI 推理引擎,与 Mojo 深度集成。支持加载 ONNX、TorchScript、TensorFlow SavedModel 等格式的模型,自动应用图优化、算子融合、量化等技术,在 CPU/GPU 上实现高效推理。是 Mojo 在 AI 生产部署中的核心竞争力。
Magic
Modular 推出的包管理器和虚拟环境工具,基于 conda 生态。与 pip/conda 类似,但专为 Mojo 和 MAX 优化,能一键安装 Mojo 工具链、管理项目依赖、创建隔离环境。类似 Rust 的 rustup + cargo 的组合。

安装 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"
Windows 用户

截至 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 vs fn:关键区别

def:与 Python 完全兼容,参数可以是动态类型,允许隐式转换,运行时灵活。
fn:Mojo 原生函数,必须声明参数类型和返回类型,编译器可做完整优化(内联、SIMD 等),性能远超 def。
建议:新代码用 fn,对接 Python API 时用 def

Mojo Playground 在线体验

在安装本地环境之前,可以先在 Mojo Playground 在线体验:访问 playground.modular.com,这是一个基于 JupyterLab 的在线环境,预装了 Mojo 内核,无需任何安装即可运行 Mojo 代码。

Mojo Playground
playground.modular.com — 基于 JupyterLab,支持 Mojo 内核,可以在浏览器中交互式运行 Mojo 代码,是学习和实验的最快入口。
VS Code 插件
在 VS Code 扩展市场搜索「Mojo」,安装 Modular 官方插件,获得语法高亮、代码补全、错误提示、跳转定义等完整 IDE 支持。
.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.🔥,可解释运行也可编译为二进制。