2015-04-14 4 views
9

Perché l'immutabilità è forzata in Rust, a meno che non si specifichi mut? È una scelta di design per la sicurezza, lo consideri come dovrebbe essere naturale in altre lingue?Perché l'immutabilità è applicata in Rust se non diversamente specificato con `mut`?

Probabilmente dovrei chiarire, sono ancora un principiante in Rust. Quindi questa è una scelta di design legata a un'altra caratteristica del linguaggio?

+0

Ti chiedi se è importante tenere traccia della mutabilità o sei già convinto che il monitoraggio della mutabilità è importante e vuoi solo sapere se l'immutabilità è l'impostazione predefinita? –

+0

Uhhh, ho aggiornato la domanda un po '. Cosa intendi per tracciabilità della mutabilità? –

+0

In realtà, la ruggine non impone la mutevolezza interna. Quello che controlla è che non puoi chiamare il metodo '& mut' su qualcosa che non è stato dichiarato' mut'. Puoi ancora cambiare 'Cell' o' RefCell' usando un prestito immutabile. –

risposta

14

Il Rust-Book in realtà affronta questo argomento.

Non esiste un singolo motivo per cui i binding sono immutabili per impostazione predefinita, ma possiamo pensarci attraverso uno dei principali obiettivi di Rust: la sicurezza. Se dimentichi di pronunciare mut, il compilatore lo prenderà e ti farà sapere che hai mutato qualcosa che potresti non voler modificare. Se i binding fossero mutabili per impostazione predefinita, il compilatore non sarebbe in grado di dirti questo. Se si ha fatto la mutazione, quindi la soluzione è abbastanza semplice: aggiungere mut.

Ci sono altri buoni motivi per evitare lo stato mutabile quando possibile, ma non rientrano nell'ambito di questa guida. In generale, puoi spesso evitare la mutazione esplicita, quindi è preferibile in Rust. Detto questo, a volte, la mutazione è ciò di cui hai bisogno, quindi non è verboten.

Fondamentalmente è il C++ - Mantra che tutto ciò che non si desidera modificare dovrebbe essere const, appena fatto correttamente invertendo le regole. Also see this Stackoverflow article about C++.

+2

Perfetto, probabilmente avrei dovuto controllare il loro riferimento/specifiche/libro prima di postare questo :) –

+0

Un altro punto: ogni volta che qualcuno lo misurava, la maggior parte degli attacchi era immutabile. Supponendo che siamo già venduti sul tracciamento dei binding mutabili vs immutabili, quindi contrassegnando quelli mutabili e rendendo immutabile il default è la scelta economica, in quanto usa meno codice rispetto al contrario. – delnan

+4

Non solo maggioranza, ma schiacciante maggioranza. Un test non scientifico: ho appena afferrato la fonte di Cargo, e ci sono 356 istanze di "let mut" e 1937 istanze di "let" (che ovviamente conta anche mut, quindi 1581 fa pure). –

Problemi correlati