18 个稳定版本
1.0.17 | 2024年5月14日 |
---|---|
1.0.15 | 2024年4月6日 |
1.0.14 | 2023年7月15日 |
1.0.12 | 2023年3月5日 |
0.1.3 | 2019年7月8日 |
#248 在 Rust 模式
6,891,085 每月下载量
在 12,609 个 crate(385 个直接) 中使用
43KB
899 行
编译器版本 cfg
此 crate 提供了根据 rustc 编译器版本进行条件编译的宏,类似于 #[cfg(...)]
和 #[cfg_attr(...)]
。
[dependencies]
rustversion = "1.0"
选择器
-
#[rustversion::stable]
—
在任意稳定编译器上为真。 -
#[rustversion::stable(1.34)]
—
在指定的稳定编译器上为真。 -
#[rustversion::beta]
—
在任意测试编译器上为真。 -
#[rustversion::nightly]
—
在任何夜间编译器或开发构建中为真。 -
#[rustversion::nightly(2019-01-01)]
—
在恰好一个夜间编译器中为真。 -
#[rustversion::since(1.34)]
—
在该稳定版本和任何后来的编译器中为真,包括beta和夜间版本。 -
#[rustversion::since(2019-01-01)]
—
在该夜间版本和所有更新的版本中为真。 -
#[rustversion::before(
版本或日期)]
—
#[rustversion::since(...)] 的否定。 -
#[rustversion::not(
选择器)]
—
任何选择器的否定;例如 #[rustversion::not(nightly)]。 -
#[rustversion::any(
选择器...)]
—
如果逗号分隔的任何选择器为真,则为真;例如 #[rustversion::any(stable, beta)]。 -
#[rustversion::all(
选择器...)]
—
如果所有逗号分隔的选择器都为真,则为真;例如 #[rustversion::all(since(1.31), before(1.34))]。 -
#[rustversion::attr(
选择器,
属性)]
—
用于条件包含属性;类似于cfg_attr
。
用例
在标准库中类型稳定而不破坏与旧编译器的兼容性时提供额外的特性实现;在这种情况下,Pin<P> 在 Rust 1.33 中稳定
#[rustversion::since(1.33)]
use std::pin::Pin;
#[rustversion::since(1.33)]
impl<P: MyTrait> MyTrait for Pin<P> {
/* ... */
}
类似但针对语言特性;控制打包结构体大于1的对齐能力在 Rust 1.33 中稳定。
#[rustversion::attr(before(1.33), repr(packed))]
#[rustversion::attr(since(1.33), repr(packed(2)))]
struct Six(i16, i32);
fn main() {
println!("{}", std::mem::align_of::<Six>());
}
在标准库中,使用 const
作为 const 实现的方式已经稳定。这种将 const
作为属性的使用被 rustversion::attr 宏识别为特殊情况。
use std::time::Duration;
#[rustversion::attr(since(1.32), const)]
fn duration_as_days(dur: Duration) -> u64 {
dur.as_secs() / 60 / 60 / 24
}
许可证
根据您的选择,此软件受Apache 许可证 2.0 版或MIT 许可证许可。除非您明确声明,否则您提交给本软件包的任何有意包含的贡献,根据 Apache-2.0 许可证的定义,将以上双重许可,不附加任何额外条款或条件。