开始使用 AI 的 Mojo 编程语言
虽然本人不看好所谓的人工智能,但是看看这些吹上天的技术还是不影响的。
<> 5 分钟阅读

不可否认,人工智能近年来改变了技术格局——最近几个月更是如此。但它的碎片化性质、复杂性和高成本经常成为人工智能开发人员的障碍。
进入Mojo,这是Modulal推出的一种革命性的编程语言,旨在通过结合Python的可用性和C的性能来实现AI访问的民主化。
在本文中,我们将向您介绍使用 Mojo 进行 AI 编程的未来,并指导您使用 Mojo 游乐场编写您的第一个 Mojo 代码。
- Mojo和模块化的简要介绍
- Mojo lang:专为人工智能的未来而设计
- 让 Mojo 与众不同的功能
- 编写您的第一个 Mojo 代码Mojo 中的变量使用结构类型
- 将 Python 与 Mojo 集成
- 需要注意的事项
Mojo和模块化的简要介绍
Mojo由Swift编程语言和LLVM编译器基础设施的创建者Chris Lattner设计,为Python的速度限制提供了一种新颖的解决方案。尽管它很受欢迎,但Python的性能往往滞后,这使得像C和C++这样的语言更适合高速、高性能的任务。作为回应,Mojo的诞生是为了将Python的可用性与C的性能相结合。
但这对普通的Web开发人员意味着什么?Mojo 比 Python 具有惊人的 35,000 倍速度优势,大大超过了 PyPy、Scala 和 C++ 等竞争对手。
以下是 Mojo 与其他语言在 AWS 实例上运行算法的基准测试结果: Mandelbrotr7iz.metal-16xl

来自模块化网站的Mojo与其他语言的基准截图
人工智能编程的这一飞跃为开发高性能、人工智能驱动的 Web 应用程序开辟了新的可能性,而不会牺牲 Python 语法和广泛库的熟悉程度。
Mojo lang:专为人工智能的未来而设计
Mojo的一个重要卖点是它与AI硬件的兼容性。它利用多级中间表示 (MLIR) 来扩展各种硬件类型,包括运行 CUDA 的 GPU 和类似硬件,而不会增加复杂性。
Mojo的设计还确保了跨多个硬件平台和专用加速器的可移植性。这使其成为开发需要在各种设备上运行的应用程序的绝佳选择。
Python在开发社区中如此受人喜爱的原因之一是其强大的生态系统,而Mojo将这一传统发扬光大。作为 Python 超集,它提供了对 NumPy 等 Python 库的流畅访问。这意味着您可以使用已经熟悉的工具进入 AI 开发。
要开始使用Mojo之旅,请前往Mojo游乐场,这是一个由Modulal提供的交互式平台,允许开发人员运行Mojo代码。截至 2023 年 <> 月,Mojo 仍在开发中,但您可以在这个游乐场体验其功能。
让 Mojo 与众不同的功能
以下是使Mojo脱颖而出的一些功能:
- 增强的速度:虽然Python最大的障碍是它的性能速度,但Mojo旨在规避这一挑战。与Python,Scala和C++相比,Mojo的速度呈指数级增长,数字表明它比Python快35,000倍。
- 与AI硬件的兼容性:Mojo经过精心设计,可在AI硬件上进行编程,例如运行CUDA的GPU。如上所述,该语言使用 MLIR 来管理各种硬件类型,而不会增加复杂性
- Python超集:作为Python的超集,Mojo不需要学习一种全新的编程语言,因为它与Python完全兼容。
- 错误检查和性能增强:Mojo使用类型来提高性能并执行错误检查。它还通过将值内联分配到结构中来提供对存储的控制,从而提供零成本的抽象。
- 内存安全:Mojo具有所有权和借用者检查器,可确保内存安全而不会带来复杂性
- 自动调谐:通过自动调谐,Mojo可以自动为您的参数找到最佳值,这可以大大简化编程过程
- 平铺优化:Mojo包括一个内置的平铺优化工具,可以有效地缓存和重用数据,通过在给定时间使用彼此靠近的内存并重复使用它来帮助优化性能
- 并行计算:Mojo引入内置并行化,实现多线程代码执行,执行速度提升2倍
编写您的第一个 Mojo 代码
Mojo的语法深受Python的影响。例如,Mojo中的“Hello,World!”程序看起来与Python中的程序完全相同:
print("Hello Mojo!")
Mojo 中的变量
Mojo 支持和声明,它们引入了新的作用域内运行时值。 用于声明不可变变量,而用于可变变量。下面是如何使用这些声明的基本示例: letvarletvar
def addNumbers(num1, num2):
let sum = num1
if sum != num2:
let newNum = num2
print(newNum)
addNumbers(2, 3)
使用 and 声明,还可以指定变量类型。下面是包含多种数据类型的示例: letvar
def guessLuckyNumber(guess) -> Bool:
let luckyNumber: Int = 37
var result: StringLiteral = ""
if guess == luckyNumber:
result = "You guessed right!"
print(result)
return True
else:
result = "You guessed wrong!"
print(result)
return False
guessLuckyNumber(37)
使用类型struct
在Mojo中,您可以使用该类型在低级数据布局控件之上构建安全的高级抽象。在编程中,a 是一种数据类型,它允许组合不同类型的数据项,但可以作为一个单元进行操作。 structstruct
在Mojo编程语言中,类型有点类似于其他面向对象语言中的类。它们可以有方法和属性,但与类不同,Mojo 中的结构在编译时是静态绑定的,它们直接插入或“内联”到它们的容器中,不需要单独的内存引用或“间接寻址”。 struct
下面是结构的简单定义:
struct MyPair:
var first: Int
var second: Int
fn __init__(inout self, first: Int, second: Int):
self.first = first
self.second = second
将 Python 与 Mojo 集成
Mojo并没有放弃Python的多功能性。您可以将任何Python模块导入Mojo程序,并从Mojo类型创建Python类型。这使得Mojo成为一种强大的语言,结合了C的性能和Python庞大的生态系统。
以下是在Mojo中导入Python模块的方法:
from PythonInterface import Python
let np = Python.import_module("numpy")
此示例从模块导入并使用它来访问模块。有了这种灵活性,Python开发人员很容易采用Mojo,因为他们可以利用Python生态系统和他们现有的Python知识。 Python
但是,由于Mojo专注于性能,因此它可能无法支持Python的所有动态功能,并且并非所有Python库都能保证与Mojo无缝协作。
需要注意的事项
由于Mojo处于早期开发阶段,因此随着语言的不断完善和扩展,请为潜在的不稳定或功能缺失做好准备。让我们来看看一些需要注意的事项,并检查Mojo当前状态的一些挑战。
核心语言优化
随着Mojo基础的建立,预计Mojo的核心语言将进一步改进,使其朝着稳定性和更直观的用户体验进行调整。这项基础工作应该鼓励强大的软件开发,并为语言的后续发展提供一个全面的框架。
错误处理
Mojo 当前对异常的实现是通过类型完成的。该语言的错误处理预计将变得更加细致入微,改进错误消息和更合适的错误类型,从而提供更好的显式调试信息。 Error
增强的互操作性
与其他语言的互操作性一直是Mojo的优势。人们期望在这一领域继续改进,以使Mojo对需要与现有代码库交互的项目具有吸引力。
采用和潜在的不稳定
尽管具有创新的编程范式,但Mojo相对较新,并且处于采用的早期阶段。这意味着说服社区接受并为其生态系统做出贡献可能具有挑战性。但是,Mojo的独特功能和易于与Python的迁移应该有助于它获得认可。