Rust的标准库公开为两个软件包:std
和core
。就API而言,core
中的功能是std
的子集,可以不受任何操作系统集成或堆分配的支持。在为我的库编写导入时,我总是想通过兼容得多的core
而不是std
来引用模块,如果两者都可用的话。
但是,我不清楚他们对相同功能的实现是否会有所不同。如果我使用core::cell::RefCell
,是否可以获得比我引用std::cell::RefCell
时效率低的实现?
如果两者都可用,则通过core
而不是std
引用模块是否有缺点?
答案 0 :(得分:7)
Rust旨在成为一种通用语言,可以在多种体系结构(x86_64,i686,PowerPC,ARM,RISC-V)和系统(Windows,macOS,Linux)甚至没有{{3 }}。
但是,当您没有操作系统时,就不必具有内存分配器或文件处理功能,因为这是操作系统通常会执行的操作。
这是#![no_std]
发挥作用的地方。如果将该指令放在您的 lib.rs 中,您将告诉Rust编译器不要链接std
板条箱,而只能使用core
。如您所说,core
是std
的子集,并且(大部分)具有不需要分配内存的所有内容或需要基础OS的其他内容。
尽管在实际实现中没有区别。如果core
中提供了该功能,则std
中的功能只是一个Operating System。
TL; DR:如果正在运行操作系统,请使用std
,否则请使用core
。不需要混合它们。