我注意到,在Rust中,移动应用于左值,并且静态地强制不使用从对象移动.
这些语义与Clean和Mercury中的唯一性类型有什么关系?它们是同一个概念吗?如果没有,它们有什么不同?
我注意到,在Rust中,移动应用于左值,并且静态地强制不使用从对象移动.
这些语义与Clean和Mercury中的唯一性类型有什么关系?它们是同一个概念吗?如果没有,它们有什么不同?
rust 迹所有权的概念与Mercury和Clean中的独特性不同,尽管它们相互关联,因为它们都旨在通过静态判断提供安全性,并且都是根据范围内的参考数量定义的.关键区别在于:
唯一性是一个更抽象的概念.虽然它可以被解释为对内存位置的引用是唯一的,就像Rust's lvalues一样,但它也可以应用于抽象值,比如宇宙中每个对象的状态,给出一个极端但典型的例子.没有对应于这样一个值的指针——它不能在调试器或类似的东西中打开和判断——但它可以像任何其他抽象类型一样通过接口使用.目的是给出value-oriented个在有状态存在时保持一致的语义.
至少在Mercury中(我不能说清洁),独特性是一个比所有权更有限的概念,因为必须只有一个参考.你不能像在Rust中那样,在但书上共享几份参考文献,这些参考文献不会被写入.你也不能借出一份推荐信来写作,但要在借阅人写完后再拿回来.
在Mercury中声明一些独特的东西并不能保证会写入引用,只是编译器会判断这样做是否安全;对于实现来说,复制唯一引用的内容而不是就地更新仍然有效.如果编译器认为在给定的优化级别进行更新是合适的,那么它将在适当的位置安排更新.或者,抽象类型的作者可以手动执行类似的(有时甚至更好)优化,因为用户将被迫以与他们一致的方式使用抽象类型.另一方面,Rust的所有权与记忆模型有着更直接的联系,并为行为提供了更有力的保障.