Mojo 是一种立异的编程言语,结合了 Python 的可用性和 C 的功能。它旨在成为人工智能 (AI) 开发的首选言语,由于它允许开发人员编写既快速又易于阅读的代码。
这里有一些关键点,
- Modular 是一种新的编程言语,旨在应对整个 AI 仓库的编程应战。
- Mojo 旨在成为一种立异且可扩展的编程模型,可以针对加速器和其他异构体系。
- Mojo 建立在 Python 生态体系之上,这使其广泛可用且易于运用。
为什么叫 Mojo ?
Mojo 的意思是“奇特的魅力”或“奇特的力气”。这个姓名很适合为 Python 带来奇特力气的言语,包含用于加速器和 AI 中无处不在的其他异构体系的立异编程模型。
Python 家族的一员,Mojo
Mojo 是一种新的编程言语,旨在与 Python 生态体系完全兼容。
- 将供给可预测的低级功能和低级操控。
- 将允许开发人员将代码子集布置到加速器。
- 不会创立一个支离破碎的软件生态体系。
- 将从其他言语的经验教训中受益。
- 将成为 Python 的超集,并将与现有的 Python 程序兼容。
- 将供给新东西来开发安全和高功能的体系级代码。
- 将允许开发人员在静态类型和动态类型之间进行选择。
Python 的优点:
Python 是 ML 和许多其他范畴的主导力气。
Python 易于学习,被重要的程序员群体所熟知,具有令人惊叹的社区,具有大量有价值的软件包,并且具有各式各样的好东西。
Python 通过其动态编程特性支撑开发漂亮且富有表现力的 API。
TensorFlow 和 PyTorch 等机器学习结构选用 Python 作为其用 C++ 完结的高功能运行时的前端。
对于 Modular,Python 是其 API 表面仓库中不可或缺的部分。
模块化团队希望 Python 生态体系中的人们看到他们的 Mojo 目标是将 Python 提升到一个新的水平——完结它——而不是与之竞争。
Python 兼容性
Mojo 旨在与 Python 生态体系完全兼容。兼容性有两种类型:导入兼容性和搬迁兼容性。
Mojo 与 Python 100% 导入兼容,由于它运用 CPython 完结互操作性。但 Mojo 没有完全与 Python 兼容。
就 Python 和 Mojo 而言,Mojo 期望直接与 CPython 运行时协作,并具有与 CPython 类和对象集成的相似支撑,而无需自行编译代码。
这供给了与现有代码的庞大生态体系的插件兼容性,并且它支撑渐进式搬迁办法,在该办法中,向 Mojo 的增量搬迁会产生增量收益。
Python 的问题
Python 有一些众所周知的问题,包含糟糕的底层功能和全局解释器锁 (GIL),这使得 Python 成为单线程的。这些问题在一般需求高功能和多线程才能的 AI 范畴影响尤其大。
处理这些问题的一种办法是运用混合库,它们是运用 Python 和 C/C++ 的组合构建的。可是,构建混合库很复杂,需求 Python 和 C/C++ 的常识。这会使大型结构的开展变得困难,并或许导致可用性问题。
此外,必须一起处理 Python 和 C/C++ 代码的两个国际问题或许会导致难以运用调试器和其他东西。这对于 AI 开发人员来说尤其成问题,他们常常需求运用像 CUDA(核算一致设备架构)这样的加速器。
CUDA(核算一致设备架构)是一种定制的编程言语,有其自身的特别问题和局限性。
AI 国际在硬件方面有大量的立异,因此,复杂性正在失控。现在有几种尝试为加速器(OpenCL、Sycl、OneAPI 等)构建有限的编程体系。
然而,这些体系都没有处理东西和生态体系中严重损害职业的基本碎片化问题。 Mojo 旨在通过供给一种可用于体系编程和 AI 开发的一致言语来处理这些问题。
Mojo 仍在开发中,但它有或许彻底改变人工智能职业。
移动和服务器布置:
Python 生态体系的另一个应战是布置。这有许多方面,包含怎么操控依靠联系、怎么布置密封编译的“a.out”文件以及怎么提高多线程和功能。
Python 子集和其他相似 Python 的言语:
已经有许多构建可布置 Python 的尝试,例如 PyTorch 项目中的 TorchScript。
这些言语很有用,由于它们一般供给低依靠性布置处理计划,有时还具有高功能。它们运用相似 Python 的语法,这使得它们比一门新言语更容易学习。
可是,这些言语并未得到广泛选用,由于它们:
- 不与 Python 生态体系互操作
- 没有超卓的东西(例如调试器)
- 单方面更改 Python 中不方便的行为,这会损坏兼容性并进一步分割生态体系
这些办法的应战在于它们试图处理 Python 的一个缺点,但它们在 Python 的强项上并不擅长。
充其量,它们可以供给 C 和 C++ 的新替代计划,但假如不处理 Python 的动态用例,它们就无法处理“两个国际问题”。
这种办法导致碎片化,不兼容性使搬迁变得困难乃至不或许。