#unreachable #panic #configuration #build #ub

无 std inconceivable

inconceivable! 是一个宏,它与 std::unreachablestd::panic 非常相似。主要区别在于,当此crate配置为使用 ub_inconceivable 选项时,它将发出 core::hint::unreachable_unchecked 以提示编译器一个条件永远不会发生。通常编译器(LLVM)假设未定义的行为(UB)不会发生。此宏提供了“两者兼得”,它为本地构建中的断言/测试行为提供了一种可靠的方法,同时也为最终发布构建中去除分支提供了一种方法。请注意:此crate纯粹是为了将未定义行为注入到稳定、安全的Rust中。系统化使用是不明智的,也不建议。

1 个不稳定发布

使用旧的 Rust 2015

0.9.0 2020年1月31日

#369无标准库

MIT 许可证

9KB
93

feature_macros

此crate允许控制其他crate的安全性/不安全性。

示例

此宏可以(但不一定必须)与 unreachable!panic! 相同使用。


    match x {
        Foo::Bar => bar(&x),
        Foo::Baz => baz(&x),
        _ => inconceivable!(),
    } 

开发者可控选项

  • ub_inconceivable:此选项控制 inconceivable! 宏的语义。当此选项未提供(或当此选项提供,并且crate使用 rustc --version < 1.27 编译)时,inconceivable! 将简单地别名 unreachable!。当此选项提供(并且crate使用 rustc --version >= 1.27 编译)时,它将发出 unreachable_uncheck(),这是未定义的行为(UB)。

开发者不可控选项

  • RUSTC_VERSION_GE_1_27:表示是否 rustc --version >= 1.27,这被用作功能检查。

无运行时依赖

约20KB