全新编程语言【Mojo】诞生

Mojo简介

Mojo 是一种新的编程语言,它通过将最佳的 Python 语法与系统编程和元编程相结合,弥合了研究与生产之间的差距。

使用 Mojo,您可以编写比 C 更快的可移植代码,并与 Python 生态系统无缝互操作。

为什么选择 Mojo

大牛Chris Lattner
说起 Chris Lattner,大家一定不陌生。这位编译器大神,曾经领导了众多大型技术项目。他不仅是 LLVM 项目的主要发起人,还是 Clang 编译器的创作者。同时,他是苹果公司编译器开发团队的首席架构师和苹果新编程语言 Swift 创造者。此外,Chris Lattner 还为 Google Brain 和 TensorFlow 建立和管理了一系列与 AI 相关的编译器、运行时和编程语言团队。

2022 年 1 月,Chris Lattner 和 AI 领域专家 Tim Davis共同建立了 Modular AI,旨在重建全球 ML 基础设施。

Modular
当开始 Modular 时,我们无意构建一种新的编程语言。但是当我们构建我们的平台以统一世界的 ML/AI 基础设施时,我们意识到跨整个堆栈的编程太复杂了。另外,我们手写了很多 MLIR,但玩得并不开心。

我们想要的是一种创新且可扩展的编程模型,可以针对人工智能领域普遍存在的加速器和其他异构系统。这意味着一种编程语言具有强大的编译时元编程、自适应编译技术的集成、整个编译流程的缓存以及现有语言不支持的其他功能。

尽管加速器很重要,但最普遍且有时被忽视的“加速器”之一是主机 CPU。现在,CPU 有很多类似张量核的加速器块和其他 AI 加速单元,但它们也可以作为专用加速器无法处理的操作的“后备”,例如数据加载、预处理和后处理,以及与国外系统的集成。因此很明显,我们无法使用仅适用于特定处理器的“加速器语言”来提升 AI。

应用人工智能系统需要解决所有这些问题,我们认为没有理由不能只用一种语言来完成。因此,Mojo 诞生了。

我们决定 Mojo 的使命将包括编译器内部的创新以及对当前和新兴加速器的支持,但我们认为没有必要在语言语法或社区方面进行创新。所以我们选择拥抱 Python 生态系统,因为它被广泛使用,它受到 AI 生态系统的喜爱,并且因为我们相信它是一种非常好的语言。

Mojo 作为 Python 家族的一员

Mojo 语言有远大的目标:我们想要与 Python 生态系统完全兼容,我们想要可预测的低级性能和低级控制,我们需要能够将代码子集部署到加速器。此外,我们不想创建一个支离破碎的软件生态系统——我们不想让采用 Mojo 的 Python 用户与从 Python 2 到 3 的痛苦迁移进行比较。这些不是小目标!

幸运的是,虽然 Mojo 是一个全新的代码库,但我们并不是真正从概念上从头开始。采用 Python 极大地简化了我们的设计工作,因为大部分语法已经指定。相反,我们可以将精力集中在构建 Mojo 的编译模型和系统编程功能上。我们还受益于从其他语言(例如 Rust、Swift、Julia、Zig、Nim 等)中吸取的大量经验教训,从我们之前将开发人员迁移到新的编译器和语言的经验中,以及我们利用现有的 MLIR 编译器生态系统。

此外,我们认为 Mojo 的正确长期目标是提供Python 的超集(即,使 Mojo 与现有 Python 程序兼容)并拥抱 CPython 实现以提供长尾生态系统支持。如果您是 Python 程序员,我们希望 Mojo 能立即熟悉,同时还提供新工具来开发安全和高性能的系统级代码,否则这些代码需要低于 Python 的 C 和 C++。

我们并不是要让世界相信“静态是最好的”或“动态是最好的”。相反,我们相信当用于正确的应用程序时两者都很好,因此我们设计 Mojo 以允许您(程序员)决定何时使用静态或动态。

为什么选择 Python

Python 是 ML 和无数其他领域的主导力量。它易于学习,被重要的程序员群体所熟知,拥有一个令人惊叹的社区,拥有大量有价值的软件包,并且拥有各种各样的好工具。Python 通过其动态编程特性支持开发美观且富有表现力的 API,这导致 TensorFlow 和 PyTorch 等机器学习框架将 Python 用作其用 C++ 实现的高性能运行时的前端。

对于今天的 Modular,Python 是我们 API 表面堆栈中不可协商的部分——这是由我们的客户决定的。鉴于我们堆栈中的其他所有内容都是可以协商的,因此我们理所当然地应该从“Python 优先”的方法开始。

更主观地说,我们认为 Python 是一门美丽的语言。它采用简单且可组合的抽象设计,避免了在实践中多余的缩进标点符号,并且具有强大的(动态)元编程功能。所有这些都为我们提供了一条跑道,可以将语言扩展到我们在 Modular 需要的东西。我们希望 Python 生态系统中的人们看到我们的 Mojo 方向是将 Python 提升到一个新的水平——完成它——而不是与之竞争。

与 Python 的兼容性

我们计划与 Python 生态系统完全兼容,但实际上有两种类型的兼容性,所以这是我们目前对它们的立场:

  • 就您导入现有 Python 模块并在 Mojo 程序中使用它们的能力而言,Mojo 是 100% 兼容的,因为我们使用 CPython来实现互操作性。
  • 就您将任何 Python 代码迁移到 Mojo 的能力而言,它还不完全兼容。Mojo 已经支持 Python的许多核心功能,包括异步/等待、错误处理、可变参数等。然而,Mojo 还很年轻,并且缺少 Python 的许多其他功能。

就 Python 和 Mojo 而言,我们希望 Mojo 直接与 CPython 运行时合作,并具有与 CPython 类和对象集成的类似支持,而无需编译代码本身。这提供了与现有代码的庞大生态系统的插件兼容性,并支持渐进式迁移方法,在这种方法中,逐步迁移到 Mojo 会产生增量收益。

与 Python 的差异

虽然 Python 兼容性和可迁移性是 Mojo 成功的关键,但我们也希望 Mojo 成为一流的语言(这意味着它是一种独立的语言,而不是依赖于另一种语言)。它不应该仅仅为了保持兼容性而限制其引入新关键字或语法产品的能力。因此,我们的兼容性方法有两个:

  • 我们利用 CPython 无需修改即可运行所有现有的 Python 3代码,并使用其未经修改的运行时来与整个生态系统完全兼容。以这种方式运行代码不会从 Mojo 中获益,但这个生态系统的存在和可用性将迅速加速Mojo 的启动,并利用 Python 已经非常适合高级编程这一事实。
  • 我们将提供一个机械迁移工具,为希望将代码从 Python 迁移到 Mojo 的人提供非常好的兼容性。例如,为了避免使用与 Mojo关键字匹配的标识符名称的 Python 代码出现迁移错误,Mojo 提供了一个反引号功能,允许任何关键字充当标识符。

总之,这使得 Mojo 可以很好地集成到主要是 CPython 的世界中,但允许 Mojo 程序员逐步将代码(一次一个模块或文件)移动到 Mojo。这是 Apple 执行的从 Objective-C 到 Swift 迁移的行之有效的方法。

Python 的问题

使 Mojo 成为 Python 的超集,我们相信我们可以解决 Python 的许多现有问题。

  • Python 有一些众所周知的问题——最明显的是低级性能差和 CPython 实现细节,例如全局解释器锁 (GIL),这使得 Python成为单线程。虽然有许多正在进行的项目来改善这些挑战,但 Python 带来的问题更深层次,并且在 AI 领域尤其具有影响力。
  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值