通过“core”或“alloc”而不是“std”引用模块有什么缺点吗?

问题描述 投票:0回答:1

Rust 的标准库公开为三个包:

std
alloc
core
。就 API 而言,
core
中的功能是
std
的子集,无需依赖任何操作系统集成或堆分配即可支持。
alloc
介于两者之间,其功能依赖于堆分配,但不与其他操作系统集成。在为我的库编写导入时,我总是想通过更兼容的
core
alloc
而不是
std
来引用模块(如果可用)。

但是,我不清楚他们对相同功能的实现是否会有所不同。如果我使用

core::cell::RefCell
,我是否可以获得比我引用
std::cell::RefCell
效率更低的实现?

通过

core
alloc
而不是
std
引用模块(如果可用)有什么缺点吗?

rust
1个回答
13
投票

Rust 的目标是成为一种通用语言,可以在多种架构(x86_64、i686、PowerPC、ARM、RISC-V)和系统(Windows、macOS、Linux)甚至没有 O运行的嵌入式系统上运行S系统.

但是,当您没有操作系统时,您不一定有内存分配器或文件处理,因为这些是操作系统通常会做的事情。

这就是

#![no_std]
发挥作用的地方。如果您将该指令放入 lib.rs 中,您将告诉 Rust 编译器不要链接
std
箱,而仅使用
core
代替。正如您所说,
core
std
的子集,并且(大部分)拥有不需要分配内存或其他需要底层操作系统的东西。

但实际实施中没有区别。如果

core
中提供了该函数,则
std
中的函数只是一个 reexport

TL;DR:如果您正在运行操作系统,请使用

std
,否则使用
core
。无需混合它们。

© www.soinside.com 2019 - 2024. All rights reserved.