课程
Mojo 是一门编程语言,将 Python 等动态语言的易用性与灵活性,与 C++ 和 Rust 等系统语言的性能与可控性相结合。
它通过集成缓存、多线程和云端分发等创新编译器技术实现高性能,同时借助自动调优与元编程,让代码能够针对多种硬件进行优化。
Mojo 的关键特性包括:
- 类 Python 的语法与动态类型,让 Python 开发者易于上手;Python 是现代 AI/ML 发展的主要编程语言。
- 在 Mojo 中,您可以导入并使用任何 Python 库,确保与 Python 的完全互操作。
- 同时支持即时编译(JIT)与提前编译(AOT)。Mojo 编译器会应用高级优化,甚至能生成 GPU/TPU 代码。
- Mojo 赋予您对内存布局、并发以及其他底层细节的完整控制。
- 通过融合动态语言与系统语言的能力,Mojo 采用统一的编程模型,对初学者友好,并可基于加速器扩展至多种使用场景。
Mojo 目前仍不完整,且尚未向公众开放。其文档主要面向具备系统编程经验的开发者。
不过,随着语言的发展,他们计划让其更易用,也更便于初学者接触。
Mojo 语言入门
Mojo 未公开发布,但您可以通过注册 Modular Products 访问 Mojo Playground。注册时,请确保在 Modular Product Interest 中选择了 Mojo。

图片来源:Modular:立即开始
注册完成后,您将在一小时内收到电子邮件,获准访问 Mojo Playground。Mojo Playground 是一个 JupyterHub 环境,用户可以访问相同的 Mojo 标准库。同时,每位用户拥有私有存储卷,用于编写并保存自己的 Mojo 程序。

图片来源:Mojo Playground
当 Mojo 开源并向公众开放后,您可以在终端运行 Mojo 程序。它既可解释执行,也可编译执行。
您可以将文件保存为 test.mojo 或 test.🔥。
没错,您可以用火焰表情保存文件。如下所示,我们创建了一个简单的 Mojo 文件 test.🔥,并在终端中运行。
def main():
print("Hello Mojo!")
$ mojo test.🔥
Hello Mojo!
Mojo 语言与 Python
Mojo 是 Python 的超集,语法与 Python 几乎相同。同时它引入了 let、var、struct 和 fn 等新特性,用于定义变量、结构与函数,以获得更高性能。
let 与 var 声明
在编写 Mojo 代码时,您可以使用关键字 let 和 var 声明特定变量,类似于在 Rust 中声明变量的方式。
let 表示变量不可更改,而 var 表示变量可被修改。这通过在编译期强制限制来提升性能。
struct 类型
Mojo 使用的 struct 关键字与 Python 的 class 类似。Python 中的类是动态且较慢的,而 struct 类型更接近 C/C++ 和 Rust。它们在编译期确定固定的内存布局,从而优化为接近机器原生的性能。
fn 定义
使用 def 定义函数会创建一个 Python 函数,具备 Python 的全部动态性与灵活性。相对地,fn 定义的是 Mojo 函数,限制更多:例如参数默认不可变,且需要显式类型与局部变量声明等。
语法对比示例
在该示例中,我们将创建一个将两个参数相加的 Mojo 函数。
运行 Mojo 函数时:
- 必须为函数参数指定类型。
- 必须使用箭头声明返回类型。
fn add(x: Int, y: Int) -> Int:
return x + y
z = add(3, 5)
print(z)
>>> 8
在 Python 中,我们可以不显式声明参数与输出类型来定义函数,这让过程更灵活直观。但相比之下,Mojo 的 fn 函数通常比 def 更快。
def add(x, y):
return x + y
z = add(3, 5)
print(z)
>>> 8
在 Mojo 中使用 Matplotlib
Mojo 不仅提升性能,还让开发者能够导入任意 Python 库并与 Mojo 函数集成。通过使用 CPython 解释器,Mojo 可无缝支持当前所有可用的 Python 模块。
在以下示例中,我们导入了 matplotlib.pyplot 并绘制了折线图。更多高级示例,请查看 Mandelbrot in Mojo。
from PythonInterface import Python
let plt = Python.import_module("matplotlib.pyplot")
x = [1, 2, 3, 4]
y = [30, 20, 50, 60]
plt.plot(x, y)
plt.show()

众所周知,Python 是最受欢迎的 AI/ML 语言。完成 Machine Learning Scientist with Python 职业学习路径,将为您提供胜任机器学习科学家职位所需的 Python 技能。
使用 Mojo 语言编程
Mojo 是 Python 的超集,正如 TypeScript 是 JavaScript 的超集。除新增关键字与函数外,任何 Python 程序员都能理解并用其构建程序。
本部分将介绍让 Mojo 兼具高性能与安全性的编程特性。
低层级编程
Mojo 是一门高级编程语言,通过 MLIR(多级中间表示,Multi-Level Intermediate Representation)这一可扩展的中间表示格式,提供对低层级原语的访问。这使得 Mojo 程序员能够实现零开销抽象,同时充分利用强大的编译器优化。
分块优化与自动调优
Mojo 内置分块优化工具,通过将计算划分为可放入快速缓存的小块,改善缓存局部性与内存访问模式。
Mojo 的 Autotune 模块提供自适应编译接口,能通过自动调优代码,帮助您为目标硬件找到最佳参数。
所有权与借用
Mojo 使用所有权与借用系统来管理内存,无需垃圾回收器即可确保稳定的运行时性能。Mojo 编译器通过静态分析评估变量的生命周期,并在数据不再被使用时立即释放。
手动内存管理
Mojo 还提供类似 C++ 与 Rust 的指针机制,以进行手动内存管理。
Mojo 中的矩阵乘法
在矩阵乘法示例中,我们发现将 Python 代码导入 Mojo 后,性能提升了17.5 倍。
通过在 Python 实现中引入类型,性能进一步大幅提升,达到了惊人的1866.8 倍。
此外,他们还使用了向量化、并行化、分块与自动调优等技术,实现了14050.5 倍的性能提升。非常出色。即便是 Julia 和 Rust 也难以提供这种级别的优化。
Mojo 语言代码示例
在这个汽车示例中,我们将用 Mojo 语法创建一个 CAR 类。
- 使用
struct创建CAR类。 - 使用
var初始化可变变量。 - 设置变量类型:“speed”为 Float32,“model”为 String。String 不是内置类型,因此需要导入。
- 使用
fn创建两个类似于 Python 的初始化函数:一个仅包含车速,另一个包含车速与车型。 - 随后,使用
CAR创建一个速度为 300 的对象。 - 打印该车的车型。
from String import String
struct CAR:
var speed: Float32
var model: String
fn __init__(inout self, x: Float32):
"""Car with only speed"""
self.speed = x
self.model = 'Base'
fn __init__(inout self, r: Float32, i: String):
"""Car with Speed and model"""
self.speed = r
self.model = i
my_car=CAR(300)
print(my_car.model)
Base
如您所见,Mojo 的编程风格与功能与 Python 相似。它可视为对 Python 的扩展,增强了性能与内存管理能力。借助 Mojo,您可以更快训练模型、实现更快的模型推理(即便在 CPU 上)、在数秒内分析海量数据,并进行实时仿真。
您可以在 Modular 文档中查看全部代码示例,并在 playground 的 Jupyter 笔记本中运行它们。
Mojo 会取代 Python 吗?
目前,由于 Mojo 处于早期阶段且缺少必要特性,很难判断其作为通用编程语言的潜力。但在对高性能要求很高的机器学习与 AI 应用中,它或许有能力超越 Python。
不过,Mojo 在短期内完全取代 Python 在数据科学和其他软件开发领域的主导地位,可能性不大。
Mojo 专为机器学习应用而设计,并非面向诸如 Web 后端、流程自动化或网页设计等其他领域。尽管其开发者未来可能扩展其能力,但 Mojo 目前的重心仍是为机器学习应用做优化。
此外,需要注意的是,与 Python 相比,Mojo 的模块与库数量有限;而 Python 拥有庞大的开发者社区,持续为 AI 与数据科学打造并改进工具。Mojo 追赶到 Python 的发展水平,可能需要数年时间。
通过 DataCamp 的 Generative AI Concepts 课程,了解生成式 AI 模型的开发方式及其将如何影响社会。
结语
总之,尽管 Mojo 作为一门面向 AI/ML、兼容 Python 的高速语言颇具潜力,但在可预见的未来,完全取代 Python 的可能性不大。Python 受益于庞大的生态、社区以及在数据科学与机器学习领域的深耕。更现实的情况是,Mojo 可能成为 Python 的互补语言,用于对速度要求极高的场景。
在本教程中,我们结合代码示例回顾了 Mojo 编程语言的特性与语法,并从性能、语法、功能与兼容性等方面将其与 Python 进行了比较。若您希望系统掌握 AI 与机器学习基础,推荐报名 Machine Learning Fundamentals with Python 学习路径。
作为一名持证的数据科学家,我热衷于利用前沿技术打造创新的机器学习应用。凭借在语音识别、数据分析与报告、MLOps、对话式人工智能以及自然语言处理方面的扎实背景,我不断打磨构建智能系统的能力,力求带来切实影响。除技术专长外,我也擅长沟通,能够将复杂概念提炼为清晰、简明的表述。因此,我成为数据科学领域备受关注的博主,与不断壮大的数据专业人士社区分享洞见与实践经验。目前,我专注于内容创作与编辑,借助大语言模型打造有力且吸引人的内容,帮助企业与个人更好地发挥数据价值。
