2014-10-10 4 views

Antwort

8

Das Konzept des Eigentums in Rust ist nicht das gleiche wie Einzigartigkeit in Mercury und Clean, obwohl sie in Beziehung stehen, da beide darauf abzielen, Sicherheit durch statische Überprüfung zu bieten, und sie sind beide in Bezug auf die Anzahl der Referenzen definiert ein Bereich. Die wichtigsten Unterschiede sind:

  • Einzigartigkeit ist ein abstrakteres Konzept. Während es so interpretiert werden kann, dass ein Verweis auf einen Speicherort einzigartig ist, wie Rust lvalues, kann es auch auf abstrakte Werte wie den Zustand jedes Objekts im Universum angewendet werden, um ein extremes, aber typisches Beispiel zu geben. Es gibt keinen Zeiger, der einem solchen Wert entspricht - er kann nicht innerhalb eines Debuggers oder ähnlichem geöffnet und überprüft werden -, aber er kann wie jeder andere abstrakte Typ über eine Schnittstelle verwendet werden. Ziel ist es, eine wertorientierte Semantik zu geben, die bei Vorliegen von Stehvermögen konsistent bleibt.

  • Zumindest in Merkur (ich kann nicht für sauber sprechen), Eindeutigkeit ist ein begrenzteres Konzept als Eigentum, in dem es genau eine Referenz geben muss. Sie können mehrere Kopien einer Referenz nicht teilen, unter der Bedingung, dass sie nicht wie in Rust geschrieben werden. Sie können auch keine Referenz für das Schreiben leihen, sondern erhalten es später zurück, nachdem der Kreditnehmer damit fertig ist.

  • Die Deklaration von etwas Einzigartigem in Mercury garantiert nicht, dass auf Referenzen geschrieben wird, nur dass der Compiler überprüft, ob dies sicher ist; Für eine Implementierung ist es immer noch zulässig, den Inhalt einer eindeutigen Referenz zu kopieren, anstatt sie zu aktualisieren. Der Compiler wird die Aktualisierung an Ort und Stelle arrangieren, wenn sie es bei der gegebenen Optimierungsstufe für geeignet hält. Alternativ dazu können Autoren abstrakter Typen ähnliche (oder manchmal drastisch bessere) Optimierungen manuell durchführen, da sie sicher sind, dass die Benutzer gezwungen sind, den abstrakten Typ in einer Weise zu verwenden, die mit ihnen konsistent ist. Die Eigentümerschaft in Rust hingegen ist direkter mit dem Gedächtnismodell verbunden und gibt stärkere Garantien für das Verhalten.

Verwandte Themen