Warum verwenden die 'Atomic *' - Typen von Rust nicht mutierbare Funktionen, um den Wert zu mutieren?

8

Ich bemerke, dass Rust% Atomic* Strukturen Funktionen haben, die den Wert ändern, wie zum Beispiel fetch_add . Zum Beispiel kann ich dieses Programm schreiben:

%Vor%

Dies kompiliert und läuft gut, aber wenn ich die AtomicUsize in eine normale Ganzzahl ändere, wird es (richtig) wegen Mutabilitätsbedenken nicht kompilieren:

%Vor%     
Ronald Smith 05.03.2016, 06:18
quelle

1 Antwort

11

Es wäre nicht sehr nützlich, wenn nicht so funktioniert. Mit &mut references kann immer nur eins existieren, und zu diesem Zeitpunkt verweist noch kein & , also wäre die ganze Frage der Atomizität der Operation strittig.

Eine andere Betrachtungsweise ist &mut sind eindeutige Referenzen und & aliasable Referenzen. Bei normalen Typen kann Mutation nur dann sicher auftreten, wenn Sie eine eindeutige Referenz haben, aber bei atomaren Typen geht es nur um Mutation (über Ersatz), ohne dass eine eindeutige Referenz benötigt wird.

Die Benennung von & und &mut war eine schwierige Angelegenheit mit viel Angst, Unsicherheit und Zweifeln in der Community und in Dokumenten wie Fokussierung auf Ownership erklärt, wie die Dinge tatsächlich sind. Die Sprache ist am Ende bei & und &mut geblieben, aber &mut steht eigentlich eher für Eindeutigkeit als für Veränderlichkeit (es ist nur so, dass die beiden meistens äquivalent sind).

    
Chris Morgan 05.03.2016 06:38
quelle

Tags und Links