用途:帮助在 Rust 中编写不依赖标准库的代码,适用于嵌入式(Cortex-M、RISC-V MCU)等无操作系统目标,或需要 alloc 堆类型的场景。
主要能力:区分 core、alloc、std 三层可用内容;给出 #![no_std] crate 的结构(crate 属性、extern crate alloc、core/alloc 导入、#[panic_handler]、#[global_allocator]);说明 #[panic_handler] 的签名约束(参数 &core::panic::PanicInfo、返回 !、私有、整个依赖图中仅一个、通常放在二进制 crate);说明 #[global_allocator] 基于 unsafe 的 GlobalAlloc trait、每个最终产物仅一个、需在首次分配前初始化;提供混合库特性分层(无特性=纯 core,alloc=core+堆,std=core+alloc+OS)与 Cargo 配置示例;给出 panic = "abort" 等 profile 建议与验证清单。
使用方式:在 crate 根部加 #![no_std];需要堆时加 extern crate alloc; 并从 alloc::* 导入 Vec、String 等;二进制 crate 提供 #[panic_handler];自定义分配器时用 #[global_allocator] 并先调用 init;混合库用 #![cfg_attr(not(feature = "std"), no_std)] 与 default = ["std"]。验证命令:cargo build --no-default-features、cargo build --no-default-features --features alloc、cargo build --target thumbv7em-none-eabihf。
适用场景:嵌入式固件、内核、WASM、需要同时服务 std 与 no_std 用户的库。
限制:no_std 下无 println!、std::fs/net/process/thread;HashMap 不在 alloc 中,需用 hashbrown;format! 需 alloc;panic 处理与分配器均为全局唯一,库不应定义;具体平台与工具链细节资料未完全展开。