自 5 月 2 日首次亮相以来,Modular 公司的 Mojo 编程语言引起了开发人员的极大兴趣,已经有超 12 万开发人员注册使用 Mojo Playground,19 万开发者热情参与 Discord 与 GitHub 讨论。Fast.ai 联合创始人、数据科学家 Jeremy Howard 更是表示,“Mojo 可能是近几十年来最大的编程语言进步。”

Mojo 能够切实满足开发者需求,引导大家逐步采用新功能,从而在必要时获得高性能体验。具体来说,Mojo 可以为开发者带来的主要收益:

 

  • 一种语言编写所有内容:Mojo 能够随时随地服务于 AI 开发者,将 Python 的可用性与以往强制开发者使用 C、C++ 或 CUDA 的系统编程功能结合起来。 开发者可以在公共代码库上工作,从而简化从研究到生产的整个工作流程。
  • 突破 Python 性能极限:时至今日,Python 已经无处不在。但对于需要更高性能或特殊硬件的任务,Python 的表现往往不那么理想。Mojo 能够发挥 CPU 的性能潜力,并可良好支持 GPU 和 ASIC 等外部加速器,提供与 C++ 和 CUDA 相当的卓越性能。
  • 对接完整 Python 生态系统:Mojo 提供与 Python 生态系统间的全面互操作性,使其能够无缝利用 Python 库资源,同时发挥 Mojo 自身的功能与性能优势。例如,开发者可以将 NumPy 和 Matpotlib 同自己的 Mojo 代码无缝混合起来。
  • 升级 AI 工作负载:Mojo 紧密集成有模块化 AI 引擎,允许开发者通过自定义操作轻松扩展自己的 AI 工作负载,包括预处理、后处理操作和高性能数学算法。开发者还可以引入内核融合、图重写、sharp 函数等。

通过对现有 Python 代码做一点简单变更,开发者就可以使用 Mojo 对高计算强度工作负载进行显著加速(最高可提速 6.8 万倍)。目前,Mojo 的实际应用案例包括:

Mojo 号称将动态和静态语言的优点结合在一起,性能可达到目前 Python 的 68,000 倍,还提供与 Python 生态系统的完全互操作性,从而可以无缝使用 Python 库。

以下为使用 Mojo 计算欧几里得距离的代码:

$ mojo
Welcome to Mojo! 
Expressions are delimited by a blank line.
Type `:mojo help` for further assistance.
1> %%python
2. import numpy as np
3. n = 10000000
4. anp = np.random.rand(n)
5. bnp = np.random.rand(n)

6> from tensor import Tensor
7. let n: Int = 10000000
8. var a = Tensor[DType.float64](n)
9. var b = Tensor[DType.float64](n)
10. for i in range(n):
11.    a[i] = anp[i].to_float64()
12.    b[i] = bnp[i].to_float64()

13> from math import sqrt
14. def mojo_naive_dist(a: Tensor[DType.float64], b: Tensor[DType.float64]) -> Float64:
15.    var s: Float64 = 0.0
16.    n = a.num_elements()
17.    for i in range(n):
18.       dist = a[i] - b[i]
19.       s += dist*dist
20.    return sqrt(s)

23> fn mojo_fn_dist(a: Tensor[DType.float64], b: Tensor[DType.float64]) -> Float64:
24.    var s: Float64 = 0.0
25.    let n = a.num_elements()
26.    for i in range(n):
27.       let dist = a[i] - b[i]
28.       s += dist*dist
29.    return sqrt(s)
30.
31> let naive_dist = mojo_naive_dist(a, b)
32. let fn_dist = mojo_fn_dist(a, b)
33. print(fn_dist)
34. 
1290.821425092235
35. print(naive_dist)
36. 1290.8521425092235

此外,Mojo 允许开发者构建静态编译的可执行文件,可以在没有任何依赖项的情况下进行部署,例如:

$ mojo build hello.

$ ./hello
Hello Mojo !
9
6
3

$ ls -lGtranh hello*
-rw-r--r-- 1 0   817 Sep  3 23:59 hello.
-rwxr-xr-x 1 0   22K Sep  3 23:59 hello

Mojo 还拥有 Visual Studio Marketplace 的官方扩展,支持语法高亮、语句诊断、格式化、补全建议等。

在即将发布的新版本中,团队将在 VS Code 中添加通过 LLDB 命令行界面实现的交互式调试体验。不仅如此,Mojo 的调试程序能够在同一调试会话中无缝对 Mojo/C/C++ 混合代码进行操作,进一步增强开发者在处理高度专业化代码时的能力。