gpt4 book ai didi

rust - Rust 代码可以在没有标准库的情况下编译吗?

转载 作者:行者123 更新时间:2023-12-03 09:57:10 25 4
gpt4 key购买 nike

我目前正在学习 Rust。我主要使用The Rust Programming Language书和this nice reference它将 Rust 特性/语法与 C++ 等价物联系起来。

我很难理解核心语言在哪里停止而标准库在哪里开始。我遇到了很多似乎与编译器有特殊关系的运算符和/或特征。例如,Rust 有一个 trait (据我了解,这就像一个接口(interface))称为 Deref让我们使用 * 取消引用实现它的类型运算符(operator):

fn main() {
let x = 5;
let y = Box::new(x);

assert_eq!(5, x);
assert_eq!(5, *y);
}

另一个例子是 ?运算符,这似乎取决于 ResultOption类型。

可以在没有标准库的情况下编译使用这些运算符的代码吗?如果不是,Rust 语言的哪些部分依赖于标准库?没有它甚至可以编译任何 Rust 代码吗?

最佳答案

Rust 标准库实际上分为三个不同的 crate:

  • core ,它是语言和标准库之间的粘合剂。语言所需的所有类型、特征和功能都可以在这个 crate 中找到。这包括运算符(operator)特征(在 core::ops 中找到), Future 特征(由 async fn 使用)和 compiler intrinsics . core crate 没有任何依赖关系,因此您可以随时使用它。
  • alloc ,其中包含与动态内存分配相关或需要动态内存分配的类型和特征。这包括动态分配的类型,例如 Box<T> , Vec<T>String .
  • std ,其中包含整个标准库,包括来自 core 的内容和 alloc还有其他要求的东西,例如文件系统访问、网络等。

  • 如果您的环境不提供 std 所需的功能crate,你可以选择不编译。如果您的环境也不提供动态内存分配,您可以选择不使用 alloc 进行编译。 crate 也是。此选项对于嵌入式系统或编写操作系统等目标很有用,在这些目标中,您通常不会拥有标准库通常需要的所有东西。

    您可以使用 #![no_std] 在你的 crate 的根目录中的属性告诉编译器在没有标准库的情况下编译(只有 core )。许多库通常还支持“no- std” 编译(例如 base64 futures ),其中功能可能会受到限制,但在没有 std 的情况下编译时会起作用。箱。

    关于rust - Rust 代码可以在没有标准库的情况下编译吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61034534/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com