gpt4 book ai didi

types - Rust 的 boolean 和其他基本类型在哪里实现?

转载 作者:行者123 更新时间:2023-11-29 07:42:34 24 4
gpt4 key购买 nike

我正在研究 Rust 中一些基本类型背后的代码,例如pleasantly simple implementationOption<T>weird macro magic背后tuple我能够在 libcore 中找到我想要的所有类型.所有除了一个 - bool .我在其他地方也找不到它。

bool背后的代码在哪里?在使用rust ?我知道这不是最新颖的类型,但我很惊讶我找不到它。

感谢 Francis 和 rodrigo 的回答,我注意到我为其他原语找到的代码只是它们的特征和相关的宏,而不是实际的实现。

Rust 书指出原语 are built-in to the language ,但我对这个解释并不满意。它们是什么时候建成的?它可以追溯到 Rust 编译器首次使用 Rust 构建的时间,还是它仍然在 OCaml 中构建时发生的?是否存在相关代码?

最佳答案

所以这里有一些关于编译器中发生的事情的更多信息。对于初学者,正如已经提到的, bool 值发生的实际操作完全由 LLVM 处理,并直接转换为相应的 CPU 指令。虽然在某些情况下代码会由于引导而神奇地出现,但这不是其中之一。编译器专门用于处理这些类型并发出正确的 LLVM 指令。

对于编译的最早部分(例如在宏扩展期间)类型 bool并不特别。这只是一些带有标识符 bool 的路径.最终around here它将被转换为原始类型。类型的实际定义是here .

那么现在让我们看看 ! 是如何实现的运算符(operator)工作。正如我之前提到的,libcore 中执行 impl Not for bool 的代码永远不会习惯。形式为 !expr 的代码变成 <T as Not>::not(expr) here .但是,您会注意到它会检查这个特定表达式是否实际上是一个方法调用,并将其保留为 !expr。如果它不是一个方法调用。它怎么知道的? MIR 中的调用只是缓存查找。缓存在类型检查过程中被填充。 Here是缓存插入发生的地方——基本上是检查 Not 是否存在。每当它看到 ! 时,就会为给定类型实现 trait .你会注意到 this line特别排除 bool 值和整数类型,它们最终会直接编译为 LLVM 指令。

这就是它的定义方式的粗略描述。您会在其他原语的相同文件中找到类似的代码。理论上,某处可能有一条线是 enum bool { true, false } -- 但最终同样的代码仍需要重写它并发出适当的 LLVM 内在函数,并且不能以这种方式表示整数。

关于types - Rust 的 boolean 和其他基本类型在哪里实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39335747/

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