吊打Python!Mojo语言首探!

作者 | Serdar Yegulalp
策划 | 云昭
Mojo很狂!它的目标非常有野心:“与Python/ target=_blank class=infotextkey>Python一样易于使用,但与Rust一样强大和快速 。”
新推出的Mojo语言,被宣传为多个领域中最好的:Python的易用性和清晰的语法,以及Rust的速度和内存安全 。这些多少有些夸大其词 。由于Mojo仍处于开发的早期阶段,用户还需要一段时间才能亲眼看到这种语言是如何达到他们的要求的 。
Mojo的创建者,一家名为Modular的公司,提供了一个早期的在线运行环境:一个Jupyter Notebook环境,用户可以在这里运行Mojo代码并了解该语言的功能和行为 。
因为Mojo还没有作为最终用户下载,所以我们首先关注的是Mojo作为一种语言是什么样子的 。我们将研究它与Python的相似之处,它的不同之处,以及它能为熟悉Python或其他语言的程序员提供什么 。
1、Mojo:Python的超集【吊打Python!Mojo语言首探!】Mojo可以被描述为Python的“超集” 。用Python编写的程序是有效的Mojo程序,尽管有些Python行为尚未实现 。目前在Python中找不到的Python行为的一些示例包括,函数的关键字参数、global关键字以及list和dict理解 。也可以使用实际的Python运行时来处理现有的Python模块,尽管这会带来性能成本 。
当Mojo引入新语法时,它用于系统级编程功能,主要是手动内存处理 。换句话说,可以为随意的用例编写Python代码(或几乎完全类似的代码),然后将Mojo用于更高级、性能密集型的编程场景 。在这两种情况下,都可以利用现有的Python库,但性能成本更高 。
Mojo与Python的另一大区别是,Mojo不像Python那样通过运行时进行解释 。Mojo是提前编译的,使用LLVM工具链来加工本地代码 。为此,最好的性能来自于使用Mojo特有的功能 。Python功能很可能是以模仿Python的动态行为为代价的,这些动态行为本质上很慢,或者仅仅通过使用Python运行时来实现 。
2、Mojo vs. Python 语法Mojo的许多母语特征有两个作用 。它们要么是Python中根本没有的全新功能,要么是Python功能的扩展,使其更具性能,尽管Python的动态性较低 。
Mojo的许多母语特征有两个作用 。它们要么是Python中根本没有的全新功能,要么是Python功能的扩展,使其更具性能(尽管Python的动态性较低) 。
例如,在Python中,没有办法在运行时正式声明变量引用不可变,尽管类型提示和其他机制可以在编辑时模仿这一点 。在Mojo中,则可以使用关键字let和var来声明Mojo特定的变量,这与在Rust中使用的方法非常相似 。let关键字表示变量是不可变的;var表示它是可变的 。这些限制是在编译时强制执行的,所以试图变异不可变引用的程序甚至不会编译 。

吊打Python!Mojo语言首探!

文章插图
Mojo的语法与Python非常相似,但提供了新的关键字来启用Mojo特定的功能,如可变行为 。
Mojo还有自己的struct关键字,与Python的class形成对比 。类只是Python类,具有所期望的所有动态行为 。不过,struct类型更像它们的C/C++和Rust对应类型,在编译时确定了固定的布局,但针对机器本机速度进行了优化 。另一个旨在区分Mojo的行为和Python的行为的Mojo关键字是fn 。如果你使用def来定义一个函数,那么就会得到了一个Python函数,以及与这些函数相关联的所有动态 。fn关键字也定义了一个函数,但定义为Mojo函数 。这意味着参数在默认情况下是不可变的,并且必须显式类型化,并且必须声明所有局部变量(除其他外) 。
3、Modular Playground如果想知道用Mojo有多爽,现在还需要取号排队 。Modular通过Modular Playground提供了对Mojo的早期访问,这是一个基于网络的Jupyter Notebook环境,运行在Modular的服务器上 。目前,Mojo还没有可在自己的系统上下载的运行时 。从好的方面来说,这意味着你可以通过任何带有网络浏览器的计算机运行Mojo 。
Mojo在线环境附带了一些notebook示例,以及关于在某些任务中使用Mojo的详细内联注释 。其中一个例子是一个常见的程序员演示,绘制了Mandelbrot集算法 。乍一看,代码与Python非常相似 。即使是新的特定于Mojo的关键字也能很好地与现有的Python语法集成,因此可以仔细查看代码并大致了解发生了什么 。
吊打Python!Mojo语言首探!

文章插图
Mojo游乐场在行动,运行Mandelbrot情节演示 。用于生成此演示的代码是本地Mojo代码和Python库的混合,通过Mojo的Python运行时接口调用 。


推荐阅读