0.1.2 |
|
---|---|
0.1.1 |
|
0.1.0 |
|
#19 in #rustc-version
每月 22 次下载
30KB
623 行
编译器版本 cfg
此crate提供宏,用于根据rustc编译器版本进行条件编译,类似于#[cfg(...)]
和#[cfg_attr(...)]
.
[dependencies]
select-rustc = "0.1"
选择器
-
#[rustc::stable]
—
在任何稳定编译器上为真。 -
#[rustc::stable(1.34)]
—
在指定的稳定编译器上为真。 -
#[rustc::beta]
—
在任何beta编译器上为真。 -
#[rustc::nightly]
—
在任何nightly编译器或开发构建上为真。 -
#[rustc::nightly(2019-01-01)]
—
仅在特定的nightly版本上为真。 -
#[rustc::since(1.34)]
—
在相应的稳定版本和任何后续的编译器(包括beta和nightly)上为真。 -
#[rustc::since(2019-01-01)]
—
在相应的nightly版本及其所有后续版本上为真。 -
#[rustc::before(
版本或日期)]
—
是 #[rustc::since(...)] 的否定。 -
#[rustc::not(
选择器)]
—
任何选择器的否定;例如 #[rustc::not(nightly)]。 -
#[rustc::any(
选择器...)]
—
如果任何用逗号分隔的选择器为真,则为真;例如 #[rustc::any(stable, beta)]。 -
#[rustc::all(
选择器...)]
—
如果所有用逗号分隔的选择器都为真,则为真;例如 #[rustc::all(since(1.31), before(1.34))]。 -
#[rustc::attr(
选择器,
属性)]
—
用于条件性地包含属性;类似于cfg_attr
。
用例
当类型作为标准库中的稳定实现提供额外的特质实现时,不破坏与较老编译器的兼容性;例如,在 Rust 1.33 中稳定的 Pin<P>
#[rustc::since(1.33)]
use std::pin::Pin;
#[rustc::since(1.33)]
impl<P: MyTrait> MyTrait for Pin<P> {
/* ... */
}
类似,但对于语言特性;控制打包结构体大于1的对齐能力在 Rust 1.33 中稳定。
#[rustc::attr(before(1.33), repr(packed))]
#[rustc::attr(since(1.33), repr(packed(2)))]
struct Six(i16, i32);
fn main() {
println!("{}", std::mem::align_of::<Six>());
}
当const实现作为标准库中的稳定实现时,通过 const
增强代码。这种将 const
作为属性的使用,被 rustc::attr 宏识别为特殊情况。
use std::time::Duration;
#[rustc::attr(since(1.32), const)]
fn duration_as_days(dur: Duration) -> u64 {
dur.as_secs() / 60 / 60 / 24
}
许可
根据您的选择,在 Apache License, Version 2.0 或 MIT 许可证 下许可。除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交包含在此包中的任何贡献,都将采用上述双重许可方式,不附加任何额外条款或条件。
依赖关系
约2MB
约46K SLoC