跳至内容
人工智能
Python

Mojo 语言:面向 AI 的新编程语言

一门像 Python 一样简单、像 Rust 一样快速的新编程语言概览。
Abid Ali Awan's photo
Abid Ali Awan
已更新 · 9分钟 阅读

使用 AI 探索

ChatGPTClaudePerplexity

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续
继续操作即表示您接受我们的《使用条款》和《隐私政策》,并同意您的数据存储在美国。

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 的图片:立即开始

图片来源:Modular:立即开始

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

来自 Mojo Playground 的图片

图片来源: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()

Mojo 输出图表

众所周知,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 类。

  1. 使用 struct 创建 CAR 类。
  2. 使用 var 初始化可变变量。
  3. 设置变量类型:“speed”为 Float32,“model”为 String。String 不是内置类型,因此需要导入。
  4. 使用 fn 创建两个类似于 Python 的初始化函数:一个仅包含车速,另一个包含车速与车型。
  5. 随后,使用 CAR 创建一个速度为 300 的对象。
  6. 打印该车的车型。
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 学习路径。


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

作为一名持证的数据科学家,我热衷于利用前沿技术打造创新的机器学习应用。凭借在语音识别、数据分析与报告、MLOps、对话式人工智能以及自然语言处理方面的扎实背景,我不断打磨构建智能系统的能力,力求带来切实影响。除技术专长外,我也擅长沟通,能够将复杂概念提炼为清晰、简明的表述。因此,我成为数据科学领域备受关注的博主,与不断壮大的数据专业人士社区分享洞见与实践经验。目前,我专注于内容创作与编辑,借助大语言模型打造有力且吸引人的内容,帮助企业与个人更好地发挥数据价值。

主题
人工智能
Python

学习本教程中提到的主题!

课程

生成式 AI 概念

2 小时
120.9K
了解如何负责任地开始利用生成式 AI。 了解生成式 AI 模型如何开发,以及它们未来将如何影响社会。
查看详情开始课程

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续
继续操作即表示您接受我们的《使用条款》和《隐私政策》,并同意您的数据存储在美国。
查看更多