🔬This is a nightly-only experimental API. (
core_panic
)Expand description
核心上的 panic 支持
核心库无法定义 panic,但可以声明 panic。 这意味着允许内核中的函数 panic,但要有用,上游 crate 必须定义内核使用的 panicing。 当前的 panic 接口是:
fn panic_impl(pi: &core::panic::PanicInfo<'_>) -> !
Run此定义允许对任何常规消息进行 panic,但不允许 Box<Any>
值失败。
(PanicInfo
只包含一个 &(dyn Any + Send)
,为此我们在 PanicInfo::internal_constructor 中为其填充了一个虚拟值。) 这样做的原因是核心不允许分配。
该模块还包含其他一些紧急函数,但这只是编译器必需的 lang 项。所有 panics 都通过此函数进行了分配。
实际符号通过 #[panic_handler]
属性声明。
Functions
- const_panic_fmtExperimental在 const eval 中使用此函数代替 panic_fmt。
- panicExperimental不使用格式化时核心的
panic!
宏的底层实现。 - panic_displayExperimental
- panic_fmtExperimental带有格式化消息的 panic 的入口点。
- panic_nounwindExperimental像
panic
,但没有展开和 track_caller 以减少对代码大小的影响。 - panic_nounwind_fmtExperimental像
panic_fmt
,但用于非展开 panic。 - panic_strExperimental
- unreachable_displayExperimental