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

saw*_*yer 6 rust

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

我怀疑它需要某种终身专业化.像(伪Rust)的东西:

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*/
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我们不能,因为当编译器实际生成代码("trans")时,生命周期信息已被删除

但后来它说了

不幸的是,我们不能轻易地排除不受欢迎的依赖于生命的特化,因为它们可以"隐藏"在看似无辜的特质界限之后

这是否意味着:

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