昨天,前苹果工程师、swift编程语言创建者Chris Lattner创立的ModularAI发布了一个新的编程语言Mojo。根据测试,该语言比Python最高提速35000倍!本文将简单介绍一下这个Mojo编程语言。
Mojo是Modular发布的一个全新的编程语言。最大的特点是有类似Python那样的语法,但是没有Python编程语言的问题。换句话说,这个编程语言号称非常简洁,但是性能却非常好。
Python是当前AI领域最火热的编程语言。因为其干净易学的语法和庞大的生态系统,几乎成为初学者以及快速构建算法的必选语言。但是,它的缺点也很明显,即性能问题。Python是解释性的语言,逐行解释执行,与C/C++编译后运行相比,效率较低。因此,尽管使用Python编写算法很多,但是对性能有要求的应用来说,实际部署基本都是依赖C++/CUDA等(当然,类似NumPy库底层也是C实现的,解决了一小部分问题)。而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有一个类似Jupyter notebooks的东西,大家应该很容易上手。
前面说了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是一个全新的编程语言,但是官方说明了自己并不是完全从头开始。
采用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未来会开源,会支持CPU、GPU、TPU等。尽管官方宣传Mojo速度很快,也有很多人表示兴奋,但是Mojo是否能取代Python变成未来主流的面向AI的编程语言,需要看它是否真的可以变成像Python那样简单易用,但是却性能强悍!