std::ops::Add 还是 core::ops::Add?

std::ops::Add or core::ops::Add?

这两个特征 (std::ops::Add, core::ops::Add) 提供相同的功能,并且它们都使用相同的示例(都利用 std::ops::Add)。他们的一组实现者有所不同。

是否应该默认使用 std::ops::Add?为什么两者都存在,而不是一个?

没有两个特征。有一个特征以几个可互换的名称导出。 这绝非独一无二。实际上 core 中的所有内容也都是从 std 导出的,并且几乎总是在完全相同的路径下(即,您只需将 "core" 前缀替换为 "std")。

至于你应该使用哪一个:如果你有理由不 link 到标准库 (#![no_std]),那么 std::* 是不可用的,所以显然你使用 core::*。另一方面,如果您 使用标准库,则应该使用 std::* 重新导出。它更习惯并且需要更少的输入。

它们实际上完全相同,尽管列出的实现者集合略有不同。

core 库专为 bare-metal/low-level 任务而设计,因此比 std 假设操作系统存在时所能提供的更准系统。但是,使用 std 的人也会想要 core 中的内容(例如 AddOption 或其他),这样可以避免同时加载 stdcorestd 重新导出 corevia pub use 中的所有内容。即stdcore.

中的东西提供了aliases/import个路径

some unfortunate error messages 编译器指向项目的原始来源,而不是再导出,它可能不在您正在 extern crateing 的板条箱中。