我注意到,在Rust中,移动应用于左值,并且静态地强制不使用从对象移动.

这些语义与Clean和Mercury中的唯一性类型有什么关系?它们是同一个概念吗?如果没有,它们有什么不同?

推荐答案

rust 迹所有权的概念与Mercury和Clean中的独特性不同,尽管它们相互关联,因为它们都旨在通过静态判断提供安全性,并且都是根据范围内的参考数量定义的.关键区别在于:

  • 唯一性是一个更抽象的概念.虽然它可以被解释为对内存位置的引用是唯一的,就像Rust's lvalues一样,但它也可以应用于抽象值,比如宇宙中每个对象的状态,给出一个极端但典型的例子.没有对应于这样一个值的指针——它不能在调试器或类似的东西中打开和判断——但它可以像任何其他抽象类型一样通过接口使用.目的是给出value-oriented个在有状态存在时保持一致的语义.

  • 至少在Mercury中(我不能说清洁),独特性是一个比所有权更有限的概念,因为必须只有一个参考.你不能像在Rust中那样,在但书上共享几份参考文献,这些参考文献不会被写入.你也不能借出一份推荐信来写作,但要在借阅人写完后再拿回来.

  • 在Mercury中声明一些独特的东西并不能保证会写入引用,只是编译器会判断这样做是否安全;对于实现来说,复制唯一引用的内容而不是就地更新仍然有效.如果编译器认为在给定的优化级别进行更新是合适的,那么它将在适当的位置安排更新.或者,抽象类型的作者可以手动执行类似的(有时甚至更好)优化,因为用户将被迫以与他们一致的方式使用抽象类型.另一方面,Rust的所有权与记忆模型有着更直接的联系,并为行为提供了更有力的保障.

Rust相关问答推荐

在rust中如何修改一个盒装函数并将其赋回?

收集RangeInclusive T到Vec T<><>

将JSON密钥转换为Polars DataFrame

是否可以为`T:Copy`执行`T. clone`的测试

为潜在的下游实现使用泛型绑定而不是没有泛型绑定的trait

MPSC频道在接收器处阻塞

无法实现整型类型的泛型FN

减少指示ProgressBar在Rust中的开销

UnsafeCell:它如何通知 rustc Select 退出基于别名的优化?

详尽的匹配模式绑定

仅在使用 &mut 或线程时borrow 的数据在闭包之外转义?

Rust 1.70 中未找到 Trait 实现

如何使用 Bincode 在 Rust 中序列化 Enum,同时保留 Enum 判别式而不是索引?

Rust 打包在 .deb 中

如何使用泛型满足 tokio 异步任务中的生命周期界限

如何将这些测试放在一个单独的文件中?

在 Rust 中如何将值推送到枚举 struct 内的 vec?

传递 Option<&mut T> 时何时需要 mut

list 中没有指定目标 - 必须存在 src/lib.rs、src/main.rs、[lib] 部分或 [[bin]] 部分

如何在 Rust 中使用特征标志来捕获多行代码?