gpt4 book ai didi

rust - 为什么 Rust 书中将把一个变量赋值给另一个变量作为复制顶级结构?

转载 作者:行者123 更新时间:2023-11-29 08:11:20 25 4
gpt4 key购买 nike

section on ownership in The Rust Programming Language , String 表示为具有 3 个字段的结构(3 个字段之一是指向实际字节向量的指针)。有一个例子:

let s1 = String::from("hello");
let s2 = s1;

这本书将此解释为将 s1 中包含的 3 字段结构复制到 s2(但不是字节向量),然后标记 中包含的结构>s1为“无效”(图4-4)。

为什么这样呈现而不是将 s2 呈现为指向与 s1 相同的顶级结构,然后将 s1 标记为“无效”?

这种替代表示是否会导致语义上的明显差异(或者甚至会导致问题)?如果不是,是因为它更好地反射(reflect)了底层实现吗?如果是这样,为什么实现会进行这样的复制操作?

最佳答案

Why is it presented that way

因为这是对 Rust 的所有权和移动语义进行建模的非常接近(如果不是精确的话)的方式。

Would this alternate presentation result in a visible difference in semantics

是的。 Rust 当前的语义表明,当一个变量被移动时,不能保证它保持在相同的地址。您的替代演示文稿会向读者建议地址保证是相同的(“因为图片告诉我的!”)。

不可能每一步都如此,所以不值得教人误导语义。很难确定具体细节,但我希望有更高值(value)变动的机会:

  • 跨线程传输它们
  • 从函数返回值——尽管(命名的)返回值优化可以防止这种情况发生。
  • 当值“非常小”时 — 复制它比取消引用内存更便宜。

why would the implementation make such a copy operation?

实现 不一定要复制。虽然语义 不保证地址保持不变,但它们也不强制要求它必须 更改。事实上,优化器会花时间尝试尽可能减少各种不必要的副本。所讨论的特定示例极有可能不涉及任何副本。

关于rust - 为什么 Rust 书中将把一个变量赋值给另一个变量作为复制顶级结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49909664/

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