昨天,前苹果工程师、swift编程语言创建者Chris Lattner创立的ModularAI发布了一个新的编程语言Mojo。根据测试,该语言比Python最高提速35000倍!本文将简单介绍一下这个Mojo编程语言。

  • Mojo编程语言简介
  • Mojo实际案例展示Mojo语言的第一个案例官方的详细的案例Mojo支持NotebookMojo使用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 Pythona = 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那样简单易用,但是却性能强悍!

举报/反馈

数据学习者

343获赞 1594粉丝
人工智能和一切促进人类生活美好的新技术
关注
0
0
收藏
分享