RustPython火了!将Python用作Rust脚本语言,支持WebAssembly

前有科技后进阶 2024-04-26 06:38:13

大家好,很高兴又见面了,我是"高级前端‬进阶‬",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

什么是 RustPython

RustPython is a Python interpreter written in Rust. RustPython can be embedded into Rust programs to use Python as a scripting language for your application, or it can be compiled to WebAssembly in order to run Python in the browser. RustPython is free and open-source under the MIT license.

Python 有很多实现,例如:

CPython(C),最常见的 Python 实现Jython(Java)IronPython (.NET)PyPy(Python)Stackless

以上 Python 实现都具有一些优点:例如,Jython 将 Python 2 源代码编译为 Java 字节码,然后将其路由到 Java 虚拟机。 由于 Python 代码被转换为 Java 字节码,因此在运行时看起来就像一个真正的 Java 程序,因此与 Java 应用程序集成得很好。

IronPython 与 .NET 集成良好,这意味着 IronPython 可以使用 .NET 框架和 Python 2 库,反之亦然。

RustPython 解锁了 Jython 和 IronPython 相同的可能性,适用于 Rust 编程语言。 此外,由于 Rust 的最小运行时间,因此能够将 RustPython 编译为 WebAssembly,并允许用户在浏览器中轻松运行 Python 代码。

总之,RustPython 是一个用 Rust 编写的 Python 解释器,可以嵌入到 Rust 程序中,以使用 Python 作为应用程序的脚本语言,也可以将其编译为 WebAssembly 以便在浏览器中运行 Python。

目前 RustPython 通过 Github 通过 MIT 协议开源,有超过 18k 的 star、1.2k 的 fork、800 + 项目依赖量、代码贡献者 400+、妥妥的优质开源项目。

如何使用 RustPython

RustPython 需要安装 Rust 最新的稳定版本,如果系统上当前尚未安装 Rust,可以按照 rustup.rs 中的说明进行安装。

要检查当前运行的 Rust 版本,请使用 rustc --version。 如果想更新,rustup update stable 会将 Rust 安装更新到最新的稳定版本。

要在本地构建 RustPython,首先克隆源代码:

git clone https://github.com/RustPython/RustPython

然后切换到 RustPython 目录并运行 Demo(注意:需要 --release 来防止 Windows 上的堆栈溢出):

// 切换到指定目录运行$ cd RustPython$ cargo run --release demo_closures.pyHello, RustPython!

或者使用交互式 Shell 命令:

// 使用交互式 shell$ cargo run --releaseWelcome to rustpython>>>>> 2+24

还可以使用以下命令安装并运行 RustPython:

// cargo 安装$ cargo install --git https://github.com/RustPython/RustPython$ rustpythonWelcome to the magnificent Rust Python interpreter>>>>>

最后值得一提的是,RustPython 有一个非常实验性的 JIT 编译器,可以将 python 函数编译为本机代码,但是需要手动启用:

// 要安装 autoconf、automake、libtool 和 clangcargo run --features jit

此时,如果要编译函数,可以对其调用 jit() 即可:

def foo(): a = 5 return 10 + afoo.__jit__() // 将 foo 编译为本机代码,后续调用将执行本机代码assert foo() == 15

更多关于 RustPython 的用法和示例可以参考文末资料,本文不再过多展开。

参考资料

https://github.com/RustPython/RustPython

https://rustpython.github.io/

https://www.freshersnow.com/rust-vs-python/

0 阅读:2

前有科技后进阶

简介:感谢大家的关注