通过`core`而不是`std`引用模块有什么缺点吗?

时间:2018-12-16 07:59:56

标签: rust

Rust的标准库公开为两个软件包:stdcore。就API而言,core中的功能是std的子集,可以不受任何操作系统集成或堆分配的支持。在为我的库编写导入时,我总是想通过兼容得多的core而不是std来引用模块,如果两者都可用的话。

但是,我不清楚他们对相同功能的实现是否会有所不同。如果我使用core::cell::RefCell,是否可以获得比我引用std::cell::RefCell时效率低的实现?

如果两者都可用,则通过core而不是std引用模块是否有缺点?

1 个答案:

答案 0 :(得分:7)

Rust旨在成为一种通用语言,可以在多种体系结构(x86_64,i686,PowerPC,ARM,RISC-V)和系统(Windows,macOS,Linux)甚至没有{{3 }}。

但是,当您没有操作系统时,就不必具有内存分配器或文件处理功能,因为这是操作系统通常会执行的操作。

这是#![no_std]发挥作用的地方。如果将该指令放在您的 lib.rs 中,您将告诉Rust编译器不要链接std板条箱,而只能使用core。如您所说,corestd的子集,并且(大部分)具有不需要分配内存的所有内容或需要基础OS的其他内容。

尽管在实际实现中没有区别。如果core中提供了该功能,则std中的功能只是一个Operating System

TL; DR:如果正在运行操作系统,请使用std,否则请使用core。不需要混合它们。