#sandbox #compile #wasm #rust

exers

用于在沙箱环境中编译和运行其他代码的库

2 个不稳定版本

0.2.0 2023年6月2日
0.1.0 2023年5月28日

#1454开发工具

MIT 许可证

21MB
1.5K SLoC

Exers 💻

Exers 是一个用于在不同语言和运行时中编译和运行代码的 Rust 库。

使用示例

fn main() {
    // Imports...

    let code = r#"
    fn main() {
        println!("Hello World!");
    }
    "#;

    let compiled_code = RustCompiler.compile(&mut code.as_bytes(), Default::default());
    let result = WasmRuntime.run(&compiled_code, Default::default()).unwrap();
}

支持的语言 📚

语言 支持运行时 所需依赖
Rust Wasm, 本地 Rustc
C++ Wasm, 本地 clang++
Python 本地 python3, Cython(可选)
Java ---
C# ---
Go ---
Ruby ---

可用的运行时 🏃‍♂️

运行时 状态
WASM 已实现
本地 已实现
隔离 开发中,不工作
Firecracker 未开始
Docker/Podman 未开始

贡献 🤝

如果您想为此项目做出贡献,请保持我的代码风格和格式。我使用 rustfmt 格式化我的代码。请确保您的代码可以编译并通过所有测试。如果您想添加新的语言或运行时,请记得编写测试和良好地注释代码。

提交应遵循 常规提交规范

要求 📋

WASM

如果您想使用 WASM 运行时,您需要为 rustc 安装 wasm32-wasi 目标。您可以通过运行 rustup target add wasm32-wasi 来完成此操作。

对于 C++,您需要安装 wasi-sdk 或其他 WASI sdk/libc,并将 WASI_SDK 环境变量指定为指向 sdk。

本地

本地运行时只需要您要使用的语言的依赖项。

附加功能 ✨

wasm-llvm

此功能允许您为 WASM 运行时使用 LLVM 后端。LLVM 提供更好的性能,但编译时间更长。

cython

此功能允许您为 Python 运行时使用 Cython。这使得代码执行更快,但需要安装 Cython。

示例 📄

示例位于 examples 目录中。要运行它们,您需要安装您要使用的语言的所需依赖项。然后,您可以使用 cargo run --example <example_name> 运行示例。

Dockerfile 🐳

该项目包含一个Dockerfile,可用于构建一个包含所有语言和运行时所需依赖项的Docker镜像。这个镜像可以用作创建您自己的镜像的基础 😄。我目前正在努力缩小镜像的大小(目前约为2GB),并允许您选择想要包含的语言和运行时。

警告:我尚未测试该镜像,因此它可能不适用于某些语言和运行时。

依赖项

~3–18MB
~256K SLoC