1 个不稳定版本

0.1.0 2023年11月16日

#101#rustc

MIT 许可证

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