Appearance

比 Python 快 9 万倍的 Mojo 终于开源了

geekbing2024-03-31Mojomojo

2024 年 3 月 29 日,Modular Inc. 宣布开源Mojoopen in new window的核心组件。

Mojo 是一种专为编写人工智能软件设计的编程语言,去年 8 月份正式发布,迄今为止已经积累了超过 17.5 万名开发者和 5 万个组织。

去年 Mojo 一经公布就获得了极大的热度,官方说它被设计为 Python 的超集,未来会与 Python 生态系统完全兼容,有点类似 TypeScript,但是性能却是 Python 的几万倍。

官方也很明确的说了为什么要开发Mojo,详情见 Why Mojoopen in new window

下面咱们就来个安装使用到性能测试的初体验。

系统要求

Linux:

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

  1. 打开终端安装 modularopen in new window

    curl -s https://get.modular.com | sh -
    
  2. 然后使用以下命令登录您的帐户

    modular auth
    
  3. 安装 Mojo SDK:

    modular install mojo
    
  4. 设置环境变量

    # vim ~/.zshrc 插入如下内容
    export MODULAR_HOME="$HOME/.modular"
    export PATH="$MODULAR_HOME/pkg/packages.modular.com_mojo/bin:$PATH"
    # 编辑保存之后,source ~/.zshrc
    
  5. 验证安装

    mojo --version
    

Hello, world

  1. 打开VScode,安装 Mojo 插件open in new window

img

  1. 创建一个名为 hello.mojo (或 hello.🔥 )的文件并添加以下代码:

    fn main():
        print("Hello, world!")
    
  2. 使用 mojo 命令运行

    mojo hello.mojo
    

    打印输出如下:

    Hello, world!
    
  3. 构建可执行二进制文件

    mojo build hello.mojo
    
  4. 运行可执行文件

    ./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的几万倍,但性能确实强悍不少,未来可期。

上次更新 3/31/2024, 12:33:40 PM