#edsl #proc-macro #macro #syntax #quasiquote

nightly ama

用于设计混合Rust代码的进程宏的准引号系统

2个版本

使用旧的Rust 2015

0.1.4 2016年8月19日
0.1.3 2016年8月15日

#1608进程宏

MIT/Apache

16KB
325

匿名进程宏

ptal on Travis CI

在Rust的nightly频道上编译。使用 rustup 管理编译器频道。下载与 rustup override add nightly-2016-08-12 使用的相同版本的编译器。

此库用于在Rust代码中匿名地转义代码,并避免在所有地方重复使用 my_language!(code)。这是为实现进程宏并尝试将其语言集成到Rust中的人提供的工具。它使用转义机制(# 符号)来指定我们进入用户语言的世界。

使用 pcp EDSL 的示例(截断并修改以提高清晰度)

pcp! {
  // ...
  for _ in 0..n {
    let n: i32 = n as i32;
    queens.push(#(variables <- 0..n));
  }
  for i in 0..n-1 {
    for j in i + 1..n {
      let a = i as i32;
      let b = j as i32;
      #{
        constraints <- queens[i] + a != queens[j] + b;
        constraints <- queens[i] - a != queens[j] - b;
      }
    }
  }
  // ...
}

传统的Rust代码在宏 pcp! 中,但我们很容易用 #(code)#{code} 逃逸我们定义的用户语言,具体取决于生成代码的性质(表达式或语句)。将控制权交给用户编译器(主函数参数 compile_anonymous_macro)内的代码,并自动插入生成的Rust代码。

许可证

根据以下之一许可:

贡献

除非您明确声明,否则您有意提交的任何贡献,均应按上述方式双重许可,不附加任何其他条款或条件。

无运行时依赖