我有一个与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
是不可能的,这样可以更长时间地保留生命周期信息?'static
)进行优化吗?