2个版本
使用旧的Rust 2015
0.1.4 | 2016年8月19日 |
---|---|
0.1.3 | 2016年8月15日 |
#1608 在 进程宏 中
16KB
325 行
匿名进程宏
在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代码。
许可证
根据以下之一许可:
- Apache License,版本2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)任选其一。
贡献
除非您明确声明,否则您有意提交的任何贡献,均应按上述方式双重许可,不附加任何其他条款或条件。