16个版本 (稳定版)

1.12.0 2021年7月6日
1.10.1 2020年8月7日
1.9.1 2020年7月7日
1.6.0 2020年1月28日
0.0.1 2019年3月28日

#181 in Rust模式

Download history 38794/week @ 2024-03-14 35984/week @ 2024-03-21 36346/week @ 2024-03-28 41911/week @ 2024-04-04 39012/week @ 2024-04-11 52003/week @ 2024-04-18 58761/week @ 2024-04-25 71375/week @ 2024-05-02 61169/week @ 2024-05-09 66477/week @ 2024-05-16 65785/week @ 2024-05-23 79113/week @ 2024-05-30 82117/week @ 2024-06-06 81313/week @ 2024-06-13 81379/week @ 2024-06-20 75583/week @ 2024-06-27

335,675 每月下载量
215 个crate中使用 (直接使用24个)

MIT 协议

46KB
892

MIRAI Annotations

此crate提供一组宏,可以用于替换标准RUST assert和debug_assert宏。它们通过允许MIRAI

  • 区分路径条件和验证条件
  • 区分它应该假设为真的条件和它应该验证的条件
  • 在编译时检查那些因为成本太高而不应在运行时检查的条件

从这些考虑中,我们得到了这些宏家族

  • 假设宏
  • 后置条件宏(如verify where定义和like assume for callers)
  • 前置条件宏(如assume where定义和like verify for callers)
  • 验证宏

这些宏都有三种类型

  • 仅在编译时检查 ('macro' 中包含 {assume, precondition, verify} 中的宏)
  • 始终在运行时检查 ('checked_macro')
  • 仅对调试构建在运行时检查 ('debug_checked_macro')

此外,运行时检查的类型还提供 eq 和 ne 变体,因此对于 assume 我们有

  • assume!
  • checked_assume!
  • checked_assume_eq!
  • checked_assume_ne!
  • debug_checked_assume!
  • debug_checked_assume_eq!
  • debug_checked_assume_ne!

同样对于 postcondition! 和 precondition! 以及 verify!

此外,我们还有

  • assumed_postcondition!,它是在定义站点处的假设,而不是验证。
  • assume_preconditions!,它假设调用者已经满足下一个调用所有(推断的)前置条件。
  • assume_unreachable!,它假设由于MIRAI无法推理的原因不可达。
  • unrecoverable!,它与panic!相同,但明确表示这并不是到达这里的编程错误。
  • verify_unreachable!,它要求MIRAI验证它不可达。

此外,此crate还提供用于描述和约束仅对MIRAI有意义的抽象状态的宏。这些是

  • abstract_value!
  • add_tag!
  • does_not_have_tag!
  • get_model_field!
  • has_tag!
  • result!
  • 设置模型字段!

请参阅文档了解如何使用这些功能。

无运行时依赖