簡體   English   中英

Rust的所有權語義如何與Clean和Mercury中的唯一性類型相關?

[英]How do Rust's ownership semantics relate to uniqueness typing as found in Clean and Mercury?

我注意到在Rust中移動應用於左值,並且靜態強制執行不移動的對象。

這些語義如何與Clean和Mercury中的唯一性類型相關? 它們是相同的概念嗎? 如果沒有,它們有何不同?

Rust中的所有權概念與Mercury和Clean中的唯一性不同,盡管它們的相關性在於它們都旨在通過靜態檢查提供安全性,並且它們都是根據范圍內的引用數量來定義的。 關鍵的區別是:

  • 唯一性是一個更抽象的概念。 雖然可以解釋為對內存位置的引用是唯一的,如Rust的左值 ,但它也可以應用於抽象值,例如宇宙中每個對象的狀態,以給出一個極端但典型的例子。 沒有與這樣的值對應的指針 - 它不能在調試器或類似的東西中打開和檢查 - 但它可以像任何其他抽象類型一樣通過接口使用。 目的是提供一種在有狀態存在的情況下保持一致的價值導向語義。

  • 在水星中,至少(我不能說清潔),唯一性是一個比所有權更有限的概念,因為必須有一個參考。 你不能分享一些參考文獻的副本,條件是它們不會被寫入,就像在Rust中可以做到的那樣。 您也不能提供寫作參考,但在借款人完成后再將其取回。

  • 在Mercury中聲明一些獨特的東西並不能保證寫入引用會發生,只是編譯器會檢查它是否安全; 它仍然適用於復制唯一引用的內容而不是更新到位的實現。 如果認為在給定的優化級別上認為合適,編譯器將安排適當的更新。 或者,抽象類型的作者可以手動執行類似(或者有時更好)的優化,安全地知道用戶將被迫以與他們一致的方式使用抽象類型。 另一方面,Rust中的所有權更直接地與內存模型相關聯,並且對行為提供了更強的保證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM