#测试 #断言 #静态

no-std static_assertions

编译时断言,确保满足不变量

15 个版本 (2 个稳定版本)

使用旧的 Rust 2015

1.1.0 2019年11月3日
0.3.4 2019年8月12日
0.3.3 2019年6月12日
0.3.1 2018年11月15日
0.2.3 2017年8月24日

#45 in Rust 模式

Download history 1186903/week @ 2024-03-14 1191289/week @ 2024-03-21 1167335/week @ 2024-03-28 1217359/week @ 2024-04-04 1200492/week @ 2024-04-11 1197560/week @ 2024-04-18 1135175/week @ 2024-04-25 1153184/week @ 2024-05-02 1137023/week @ 2024-05-09 1154739/week @ 2024-05-16 1134178/week @ 2024-05-23 1286240/week @ 2024-05-30 1265216/week @ 2024-06-06 1293026/week @ 2024-06-13 1289713/week @ 2024-06-20 1087630/week @ 2024-06-27

5,181,337 每月下载量
用于 10,497 个 crate (797 个直接使用)

MIT/Apache

46KB
243

Banner

Rust 的编译时断言,由 Nikolai Vazquez 提供。

这个库允许您确保关于常量、类型等的正确假设。请参阅 文档常见问题解答 以获取更多信息!

安装

这个 crate 可在 crates.io 上找到,可以通过将以下内容添加到您的项目 Cargo.toml

[dependencies]
static_assertions = "1.1.0"

以及以下内容添加到 crate 根目录 (main.rslib.rs)

#[macro_use]
extern crate static_assertions;

用法

此 crate 公开了以下宏

常见问题解答

  • 问:我在什么时候会想要使用这个库?

    答:当您想要确保常量、类型和特性的属性时,这个库非常有用。

    基本示例

    • 随着 1.39 版本的发布,可以在 str::len 在一个 const 上下文中被调用。使用 const_assert!,可以检查从其他地方生成的字符串是否具有给定的大小

      const DATA: &str = include_str!("path/to/string.txt");
      
      const_assert!(DATA.len() < 512);
      
    • 有一个必须实现某些特质的类型?使用 assert_impl_all! 可以确保这一点

      struct Foo {
          value: // ...
      }
      
      assert_impl_all!(Foo: Send, Sync);
      
  • 问:我该如何贡献?

    答:有几个方法!您可以

    • 尝试提出您希望实现的一种形式的静态分析。创建一个 新问题,并描述您想象中的断言如何工作,附上示例代码以示。

    • 实现您自己的静态断言并创建一个 拉取请求

    • 提供反馈。有哪些痛点?哪里不太方便?

    • 编写文档。如果您熟悉这个库的工作方式,将您的知识分享给其他用户将是非常好的!

  • 问:这会影响我的编译二进制文件吗?

    答:不会!使用这个库没有运行时成本,因为所有检查都是在编译时进行的,因此不会生成任何要运行的代码。

  • 问:这会影响我的编译时间吗?

    答:可能不会引起可感知的影响。如果这是一个担忧,可以将这个库放在 dev-dependencies

    [dev-dependencies]
    static_assertions = "1.1.0"
    

    中,然后可以在 #[cfg(test)]

    #[cfg(test)]
    const_assert_eq!(MEANING_OF_LIFE, 42);
    

    然而,断言只有在运行 cargo test 时才会被检查。这多少抵消了通过编译失败来提前捕获假静态条件的目的。

  • 问:什么是 const _

    答:这是一种创建未命名常量的方法。这是为了使宏可以从全局作用域调用而不需要唯一的标签。这个库利用了评估 const 表达式的副作用。有关更多信息,请参阅该功能的 跟踪问题问题 #1

更改

请参阅 CHANGELOG.md,了解从一个版本到另一个版本的所有更改。

许可

您可以选择以下任一许可来发布此项目:

无运行时依赖项

功能