Le strutture dati funzionali (come il Trie Hash Array Mapped utilizzato in Haskell/Clojure/Scala) si basano su molte condivisioni nella struttura dati sottostante. Ad esempio, se implementiamo insert
su un tipo di dati simile a una mappa che di solito viene implementato copiando il percorso sull'albero che implementa la struttura dati.Le regole sul prestito di Rust intralciano le strutture funzionali dei dati?
Dato che queste strutture di dati si basano molto sulla condivisione (e nessun proprietario principale di) valori sottostanti, i prestiti prenderanno il modo di implementare tali strutture?
Come detto, questa domanda sembra troppo ampia o basata sull'opinione pubblica. Hai provato qualcosa e non ha funzionato? Sei a conoscenza del "portello di fuga" che fornisce "non sicuro"? Che tipo di risposta sarebbe valida qui? C'è una [hamt crate] (https://crates.io/crates/hamt/), fornisce una risposta? – Shepmaster
Vedere la risposta a [questa domanda] (https://stackoverflow.com/questions/31227269/generic-types-ownership-and-persistent-data-structures?rq=1). Spiega che 'Rc' consente a più proprietari degli stessi dati, e mentre potrebbe sembrare' .clone() 'fa una copia, è una copia superficiale che in realtà non copia i dati. In realtà è l'immutabilità che permette che ciò accada. La cassa hamt usa 'Rc' [qui] (https://github.com/rainbowbismuth/hamt-rs/blob/master/src/lib.rs#L801). –
La proprietà condivisa e immutabile è in genere semplice rendendo esplicito GC. I dati ciclici sono la parte problematica. – Veedrac