rig*_*old 19 mercury move-semantics rust clean-language
我注意到在Rust中移动应用于左值,并且静态强制执行不移动的对象.
这些语义如何与Clean和Mercury中的唯一性类型相关?它们是相同的概念吗?如果没有,它们有何不同?
Mar*_*own 11
Rust中的所有权概念与Mercury和Clean中的唯一性不同,尽管它们的相关性在于它们都旨在通过静态检查提供安全性,并且它们都是根据范围内的引用数量来定义的.关键的区别是:
唯一性是一个更抽象的概念.虽然可以解释为对内存位置的引用是唯一的,如Rust的左值,但它也可以应用于抽象值,例如宇宙中每个对象的状态,以给出一个极端但典型的例子.没有与这样的值对应的指针 - 它不能在调试器或类似的东西中打开和检查 - 但它可以像任何其他抽象类型一样通过接口使用.目的是提供一种在有状态存在的情况下保持一致的价值导向语义.
在水星中,至少(我不能说清洁),唯一性是一个比所有权更有限的概念,因为必须有一个参考.您不能共享参考文件的多个副本,条件是它们不会被写入,这可以在Rust中完成.您也不能提供写作参考,但在借款人完成后再将其取回.
在Mercury中声明一些独特的东西并不能保证写入引用会发生,只是编译器会检查它是否安全; 它仍然适用于复制唯一引用的内容而不是更新到位的实现.如果认为在给定的优化级别上认为合适,编译器将安排适当的更新.或者,抽象类型的作者可以手动执行类似(或者有时更好)的优化,安全地知道用户将被迫以与他们一致的方式使用抽象类型.另一方面,Rust中的所有权更直接地与内存模型相关联,并且对行为提供了更强的保证.