Cow :: clone返回浅拷贝需要什么样的改变?

时间:2016-12-31 10:14:53

标签: rust

我有一个与Rust issue #34284相关的问题。我理解为什么在当前的Rust中不可能,但我很好奇需要进行哪种(破坏性)更改以避免Cow::clone中的分配。

我怀疑它需要某种终身专业化。像(伪锈):

impl<'a, B: ?Sized> Clone for Cow<'a, B> where B: ToOwned {
    fn clone(&'b self) -> Cow<'a, B> {
        if /*lifetimes 'a and 'b allow for optimization*/ {
            return /*shallow copy*/
        } else {
            return /*as it is today*/
        }
    }
}

RFC 1210指出基于生命期的专业化是不可能的:

  

我们不能,因为当编译器实际生成代码时   (“反式”),终身信息已被删除

但后来它说

  

不幸的是,我们不能轻易排除不良后果   依赖于生命的专业化,因为它们可以“隐藏”   落后无辜的特质界限

这是否意味着:

    如果不更改编译器,
  • 优化Cow::clone是不可能的,这样可以更长时间地保留生命周期信息?
  • 如果RFC 1210允许,可以仅针对语言定义的生命周期('static)进行优化吗?

0 个答案:

没有答案