比 Python 快 9 万倍的 Mojo 终于开源了
2024 年 3 月 29 日,Modular Inc. 宣布开源Mojo的核心组件。
Mojo 是一种专为编写人工智能软件设计的编程语言,去年 8 月份正式发布,迄今为止已经积累了超过 17.5 万名开发者和 5 万个组织。
去年 Mojo 一经公布就获得了极大的热度,官方说它被设计为 Python 的超集,未来会与 Python 生态系统完全兼容,有点类似 TypeScript,但是性能却是 Python 的几万倍。
官方也很明确的说了为什么要开发Mojo,详情见 Why Mojo。
下面咱们就来个安装使用到性能测试的初体验。
系统要求
Linux:
- Ubuntu 20.04/22.04 LTS
- x86-64 CPU (with SSE4.2 or newer) or AWS Graviton2/3 CPU
- Minimum 8 GiB RAM
- Python 3.8 - 3.11
- g++ or clang++ C++ compiler
Mac:
- Apple silicon (M1 or M2 processor)
- macOS Monterey (12) or later
- Python 3.8 - 3.11
- Command-line tools for Xcode, or Xcode
暂时不支持Windows
安装 Mojo
打开终端安装
modular
curl -s https://get.modular.com | sh -
然后使用以下命令登录您的帐户
modular auth
安装 Mojo SDK:
modular install mojo
设置环境变量
# vim ~/.zshrc 插入如下内容 export MODULAR_HOME="$HOME/.modular" export PATH="$MODULAR_HOME/pkg/packages.modular.com_mojo/bin:$PATH" # 编辑保存之后,source ~/.zshrc
验证安装
mojo --version
Hello, world
- 打开VScode,安装 Mojo 插件
创建一个名为
hello.mojo
(或hello.🔥
)的文件并添加以下代码:fn main(): print("Hello, world!")
使用
mojo
命令运行mojo hello.mojo
打印输出如下:
Hello, world!
构建可执行二进制文件
mojo build hello.mojo
运行可执行文件
./hello
性能测试
先看 Python:
from time import time
def fib(n):
if n <= 1:
return n
# 初始化前两个斐波那契数
a = 0
b = 1
# 使用动态规划计算斐波那契数列
for _ in range(2, n + 1):
a, b = b, a + b
return b
def main():
start_time = time()
fib(100000)
end_time = time()
print("Python运行共计耗时: ", (end_time - start_time) * 1000, "ms")
if __name__ == "__main__":
main()
Python 执行耗时如下:
Python运行共计耗时: 128.6449432373047 ms
再来看看 Mojo:
from time import now
fn fib(n: UInt64) -> UInt64:
if n <= 1:
return n
# 初始化前两个斐波那契数
var a = 0
var b = 1
# 使用动态规划计算斐波那契数列
for _ in range(2, n + 1):
a, b = b, a + b
return b
fn main():
var start_time = now()
var total = fib(100000)
# mojo默认输出的是纳秒ns
var end_time = now()
print("Mojo运行共计耗时: ", (end_time - start_time) / 1000000, "ms")
Mojo 执行耗时如下:
Mojo运行共计耗时: 0.075999999999999998 ms
大约1692.7
倍,这么一看,Mojo也没有Python的几万倍,但性能确实强悍不少,未来可期。