#static #assert

no-std staticassertionsnext

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

2个稳定版本

1.1.2 2024年1月16日

#565 in 测试

Download history 14458/week @ 2024-04-14 13990/week @ 2024-04-21 14133/week @ 2024-04-28 17694/week @ 2024-05-05 17042/week @ 2024-05-12 23418/week @ 2024-05-19 19121/week @ 2024-05-26 21326/week @ 2024-06-02 17527/week @ 2024-06-09 16278/week @ 2024-06-16 18501/week @ 2024-06-23 17283/week @ 2024-06-30 18656/week @ 2024-07-07 19400/week @ 2024-07-14 23080/week @ 2024-07-21 26903/week @ 2024-07-28

88,602 每月下载量
70crate中使用了(直接使用3个)

MIT/Apache

62KB
512

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::lenconst上下文中调用。使用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);
      
  • 问:我如何贡献?

    答:有几个方法!你可以

    • 尝试提出一些你想看到实现的形式的静态分析。创建一个新问题并描述你想象中的断言如何工作,用示例代码进行演示。

    • 实现您自己的静态断言,并创建一个 pull request

    • 提供反馈。有哪些痛点?在哪里感觉不愉快?

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

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

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

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

    答:可能不会对您感知到的东西造成影响。如果这是一个问题,可以将这个库放入 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 以获取从一个版本到另一个版本的所有更改的完整列表。

许可证

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

自行选择。

依赖项