#unreachable #macro #build #switch #depending #profile #unreachable-unchecked

dbg_unreachable

使用单个宏在 unreachable! 和 unreachable_unchecked 之间切换

3个版本

0.1.2 2024年7月11日
0.1.1 2024年7月11日
0.1.0 2024年7月11日

Rust模式 中排名第732

Download history 256/week @ 2024-07-06 41/week @ 2024-07-13 1/week @ 2024-07-20 5/week @ 2024-07-27

每月下载量303
2 个crate中使用 (通过 rb64)

MIT 协议

5KB

调试不可达

此crate定义了一个 unreachable! 宏,其编译条件取决于构建配置。如果构建为 debug,则转换为 core::unreachable;如果构建为 release,则转换为 core::hint::unreachable_unchecked。在某些情况下,unreachable_unchecked 的速度比 unreachable 快。此宏在发布模式下使用未检查版本,但在调试模式下仍然进行检查,允许您捕获不可达代码被访问的情况。


lib.rs:

此crate定义了一个 [unreachable!] 宏,其编译条件取决于构建配置。

如果构建为 debug,则转换为 core::unreachable

如果构建为 release,则转换为 core::hint::unreachable_unchecked

在某些情况下,unreachable_uncheckedunreachable 更快。此宏在发布模式下使用未检查版本,但在调试模式下仍然进行检查,允许您捕获不可达代码被访问的情况。

示例

use dbg_unreachable::unreachable;

let a = Some(12_i32);
match a {
    Some(n) if n >= 0 => {},
    Some(n) if n < 0 => {},
    Some(_) => unreachable!("The two arms above cover all possible cases"),
    None => {},
}

上面的代码片段转换为以下两个片段。

调试

use dbg_unreachable::unreachable;

let a = Some(12_i32);
match a {
    Some(n) if n >= 0 => {},
    Some(n) if n < 0 => {},
    Some(_) => core::unreachable!("The two arms above cover all possible cases"),
    None => {},
}

发布

use dbg_unreachable::unreachable;

let a = Some(12_i32);
match a {
    Some(n) if n >= 0 => {},
    Some(n) if n < 0 => {},
    Some(_) => unsafe { core::hint::unreachable_unchecked() },
    None => {},
}

无运行时依赖