1 个不稳定版本
0.1.0 | 2023年11月16日 |
---|
#101 在 #rustc
9KB
150 行
egd
在编译时运行任何 Rust 代码。
为什么?我不知道怎么?什么时候?现在
lib.rs
:
编译时表达式评估。这个包受到 Zig 的 comptime
的启发。
传递的闭包将在编译时进行评估。
示例
println!(
"The program was compiled on {}.",
// note how chrono::Utc is transported
edg::r! { || -> chrono::DateTime<chrono::Utc> { chrono::Utc::now() } }.format("%Y-%m-%d").to_string()
); // The program was compiled on 2023-11-16.
限制
- 与 Zig 不同,
edg::r!
没有访问其调用作用域的能力,因为edg::r!
中的闭包作为其自己的脚本运行。 - 遗憾的是,由于
serde
不是 const,因此不能有const X: _ = edg::r! { .. }
。 - 每个块必须按顺序编译。
工作原理
edg::r!
:
- 将 serde_json::to_string 添加到您的代码中
- 在您的目标目录中创建一个名为
edg-{hash}.rs
的文件,其中包含您的新代码 - 使用
rustc
编译文件 - 执行文件
- 发出代码以反序列化 JSON 输出。
前身
大部分代码来自 comptime
包。
依赖项
~1.6–2.1MB
~50K SLoC