前苹果工程师、swift编程语言创建者Chris Lattner创立的ModularAI发布了一个新的编程语言Mojo。根据测试,该语言比Python最高提速35000倍!本文将简单介绍一下这个Mojo编程语言。
- Mojo编程语言简介
- Mojo实际案例展示
- Mojo语言的第一个案例
- 官方的详细的案例
- Mojo支持Notebook
- Mojo使用Python模块示例
- 关于Mojo的其它信息
- Mojo总结
Mojo编程语言简介
Mojo是Modular发布的一个全新的编程语言。最大的特点是有类似Python那样的语法,但是没有Python编程语言的问题。换句话说,这个编程语言号称非常简洁,但是性能却非常好。
Python是当前AI领域最火热的编程语言。因为其干净易学的语法和庞大的生态系统,几乎成为初学者以及快速构建算法的必选语言。但是,它的缺点也很明显,即性能问题。Python是解释性的语言,逐行解释执行,与C/C++编译后运行相比,效率较低。因此,尽管使用Python编写算法很多,但是对性能有要求的应用来说,实际部署基本都是依赖C++/CUDA等(当然,类似NumPy库底层也是C实现的,解决了一小部分问题)。而Mojo则是为了解决这些问题存在的:
- 用一种语言完成所有的事情:Mojo将研究人员喜欢的Python部分与需要使用C、C++和CUDA的系统编程功能相结合。Mojo建立在下一代编译器技术之上。使得你可以使用类似Python的语法完成算法后获得和C++程序一样的性能。
- 解锁Python性能:Mojo建立在Modular的高性能异构运行时之上,并使用MLIR,使其能够访问所有人工智能硬件。这使Mojo可以访问线程、TensorCores和AMX扩展等低级硬件功能,并可以访问加速器!官方宣称,Mojo在运行Mandelbrot等数字算法时比Python快35000x,因为它可以充分利用您的硬件。不过需要注意的是,这里应该是指让Mojo运行在他们自己的硬件或者底层系统上。
- 充分利用Python强大的生态系统:为了避免重复造轮子,Mojo可以直接与Python代码互相操作,也就是直接使用Python的库,如NumPy、Matplotlib等。
总的来说,官方宣传Mojo的特点如下:
- 完全兼容Python生态
- 比C++更快
- 比CUDA更容易定制和修改(more hackable)
- 和RUST一样安全
Mojo实际案例展示
Mojo语言的第一个案例
目前,官方还没有发放Mojo软件,不过已经有示例代码了,下图就是在终端环境下,用Mojo写一个Hello World:
$ cat hello.
def main():
print("hello world")
for x in range(9, 0, -3):
print(x)
$ mojo hello.
hello world
可以看到,很简单,而且执行也很方便,直接使用mojo
命令后面跟着文件即可,和Python很像。而且,这里一个彩蛋,就是说mojo代码文件后缀可以是 这个emoji!这也是可以成功执行的!
官方的详细的案例
下图是官方演示的一个使用Mojo编写Mandelbrot问题的例子(这是一个数学概念,可以用来产生复杂的几何结构)。
这里可以看到更多的mojo语法,这个语法与Python很像,但是也不完全一致。里面的var、let似乎来自于swift风格。
Mojo支持Notebook
官方已经说明,Mojo有一个类似Jupyter notebooks的东西,大家应该很容易上手。
Mojo使用Python模块示例
前面说了Mojo可以直接与Python互相操作,使用很简单。下图就是如何使用Python库的代码示例:
from PythonInterface import Python
# This is equivalent to Python's `import numpy as np`
let np = Python.import_module("numpy")
# Now use numpy as if writing in Python
a = np.array([1, 2, 3])
可以看到,很简单,只需要引入Python模块之后,剩下的操作和Python完全一致了~~
关于Mojo的其它信息
尽管Mojo是一个全新的编程语言,但是官方说明了自己并不是完全从头开始。
采用Python极大地简化了我们的设计工作,因为大多数语法已经指定。相反,我们可以将精力集中在构建编译模型和设计特定的系统编程功能上。我们还受益于在其他语言(例如Clang、Rust、Swift、Julia、Zig、Nim等)方面的大量工作,并利用了MLIR编译器生态系统。我们还受益于Swift编程语言的经验,它将大量Objective-C社区的大部分迁移到了一种新的语言上。 此外,我们决定Mojo的正确长期目标是提供Python的超集(即与现有程序兼容),并立即采用CPython实现长尾生态系统。对于Python程序员来说,我们期待并希望Mojo能立即熟悉,同时也能提供新的工具来开发系统级代码,使您能够做Python需要使用C和C++才能完成的事情。我们并不是想让世界相信“静态的好”或“动态的好”——我们的信念是,当用于正确的应用程序时,两者都是好的,并且语言应该使程序员能够进行调用。
尽管官方没有透露细节,但是从这些内容可以看到,Mojo很快的原因可能是他们从底层构建了很多能力。比如,官方实例中有一个问题是,在GPU编程中选择tile因子会极大地影响最终的程序性能。Tile因子指的是GPU线程块的大小,它决定了一个线程块中有多少个线程一起执行。选取不同的tile因子,会导致线程块的数量不同,从而影响程序的执行效率。但是tile因子选择依赖你的硬件。而在Mojo中,这样的选择不需要你自己决定,Mojo可以自动帮你寻找最优的tile因子值,如下图所示:
Mojo总结
官方承诺,Mojo未来会开源,会支持CPU、GPU、TPU等。尽管官方宣传Mojo速度很快,也有很多人表示兴奋,但是Mojo是否能取代Python变成未来主流的面向AI的编程语言,需要看它是否真的可以变成像Python那样简单易用,但是却性能强悍!