繁体   English   中英

我们可以像 Clone 一样在 rust 中重新实现 Move 语义吗?

[英]Can we reimplement Move semantics in rust just like Clone?

我们可以修补 rust 中的移动语义吗?

也许像Clone一样重新实现Move 行为?

或者至少附加移动前或移动后挂钩来执行自定义逻辑?

官方 rust 文档的链接将不胜感激。

从内部语言重新设计提案线程想法:通过明确指定的重定位限制自定义移动语义似乎不存在。

但我想确保没有办法实现它。

不仅没有这样的方法,而且不仅这是一件好事(IMO),现在改变基本上是不可能的,并且所有试图这样做的提案都是选择加入而不是选择退出(也就是说,你的通用type 应该声明支持非按位移动,否则将不支持它们。基本上是某种选择退出特征?Move )。 这意味着很多东西不会支持它们,至少在生态系统中,如果不是在 std 中也是如此。

这是出于一个非常简单的原因:许多不安全的代码依赖于按位移动。 如果一个动作可以执行用户代码,那也意味着它可能会恐慌,现在不安全的代码必须防御这种情况。 或者他们可以让对象处于无效状态,即使之前不是这样。 基本上,他们可以做任何事情,而这对不安全的代码来说可能意味着任何事情。 不安全代码中的任何可能都意味着未定义的行为。 因此,现有的不安全代码将无法承受这种移动,这意味着根本没有代码能够,并且每种类型都必须声明它是否支持它们。

更不用说优化的好处,或者更容易推理按位移动。

我认为从来没有 RFC 可以做到这一点,尽管我可能不知道(有一个?Move的 RFC,但它已被Pin取代)。

如果您需要一种自定义移动的方法,则不需要移动。 使用Clone或其他特性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM