5 个不稳定版本
0.3.1 | 2023年11月1日 |
---|---|
0.3.0 | 2023年11月1日 |
0.2.1 | 2023年9月14日 |
0.2.0 | 2023年9月14日 |
0.1.0 | 2023年6月24日 |
#965 在 编程语言 中
每月 26 次下载
560KB
14K SLoC
cxc
cxc 是一种高性能脚本语言,旨在速度:无论是编写代码还是运行代码。它被构建为用作 Rust 主机脚本语言,因此它具有与 Rust 的完全互操作性。cxc 是关于在低级别上玩软件——即使不戴手套也能摸到东西,只是因为它很有趣。像 Rust 一样,cxc 编译成 MIR,然后可以被包括 LLVM 和 Cranelift 在内的多个后端编译或解释。因此,cxc 具有接近 Rust 的性能,但可以在运行时编译和修改。
安装
将以下内容放入你的 Cargo.toml
[dependencies]
cxc = "0.3"
该软件包的默认功能使用 cranelift 作为编译器后端。或者,你可以激活 "backend-llvm" 功能,它使用 LLVM,但它要求你已安装 LLVM,并且 llvm/includes
和 llvm/bin
这两个子目录都位于你的路径中。两个后端都具有完整的功能兼容性。Cranelift 后端具有更快的编译时间,并且更易于移植,但生成的代码较慢。LLVM 后端不太易于移植,因为它要求用户安装 LLVM,但生成的代码更快。
你可以通过在 Cargo.toml
中放入以下内容来访问 LLVM 后端
[dependencies]
cxc = {
version = "0.3",
default-features = false,
features = ["backend-llvm", "ffi-assertions"]
}
示例
prime.cxc
# function that takes a 32 bit integer and returns a boolean
is_prime(num: i32); bool {
divider := 2 # declare divider (type is inferred as i32)
@ divider < num { # while divider is less than num
? num % divider == 0 { # if num is divisible by divider
; false # number is not prime, so return false
}
divider = divider + 1 # increment divider
}
; true # num is not divisible by any numbers, so return true
}
main.rs
fn main() {
let mut unit = cxc::Unit::new();
let prime_code: String =
include_str!("../README.md").lines().skip(27).take(14).collect::<Vec<_>>().join("\n");
unit.push_script(&*prime_code).unwrap();
let is_prime = unit.get_fn("is_prime").unwrap().downcast::<(i32,), bool>();
assert_eq!(unsafe { is_prime(29) }, true);
}
⚠️ 警告 ⚠️(自行承担风险使用)
- 编译器非常年轻,还有很多错误。(如果你在使用此语言,请随时向我发送任何问题报告!任何类型的反馈都备受赞赏。)
- cxc 是一种低级语言,因此它在运行时执行大量的低级和不安全操作。这意味着 cxc 和 Rust 代码之间的通信是不安全和不稳定的。
- "ffi-assertions" 功能旨在在你不正确匹配 Rust 和 cxc 类型或函数时捕获问题,但它不是万能的。cxc_derive 宏有助于此,但它很容易出错。
- 最低支持的 Rust 版本(MSRV)是最新 nightly。 该软件包使用不稳定特性,如果你使用任何其他版本,将 会发生 FFI 错误。
- 没有文档,因为语言仍在变化。请查看测试文件夹中的示例以了解相关信息。
如果您认为这些因素是决定性的,您可以尝试一个不同的Rust脚本解决方案:不同的Rust脚本解决方案。
依赖项
~4–16MB
~144K SLoC