Struktury danych funkcjonalnych (takie jak odwzorowany tablica skrótów Trie używany w Haskell/Clojure/Scala) polegają na dzieleniu się dużą ilością danych w podstawowej strukturze danych. Na przykład, jeśli implementujemy insert
na typie danych podobnym do mapy, który zwykle jest implementowany przez kopiowanie ścieżek w drzewie implementującym strukturę danych.Czy reguły pożyczkowe Rusta stają na drodze do funkcjonalnych struktur danych?
Biorąc pod uwagę, że te struktury danych polegają w dużej mierze na udostępnianiu (i brakowi właściciela) podstawowych wartości, czy zaciąganie pożyczek stanie na przeszkodzie wdrażaniu takich struktur?
Tak sformułowane pytanie wydaje się zbyt szerokie lub oparte na opiniach. Czy próbowałeś czegoś i czy to nie działa? Czy znasz "luk bezpieczeństwa", który zapewnia "niebezpieczny"? Jaka odpowiedź byłaby ważna tutaj? Jest [skrzynia hamtowa] (https://crates.io/crates/hamt/), czy to stanowi odpowiedź? – Shepmaster
Zobacz odpowiedź na [to pytanie] (https://stackoverflow.com/questions/31227269/generic-types-ownership-and-persistent-data-structures?rq=1). Wyjaśnia, że 'Rc' pozwala wielu właścicielom tych samych danych i chociaż może wyglądać jak' .clone() 'robi kopię, jest płytką kopią, która faktycznie nie kopiuje danych. Tak naprawdę to niezmienność pozwala na to. Skrzynia Hamt używa 'Rc' [tutaj] (https://github.com/rainbowbismuth/hamt-rs/blob/master/src/lib.rs#L801). –
Współdzielone niezmienne własność jest generalnie proste dzięki wyraźnemu wyrażeniu GC. Cykliczne dane stanowią część problematyczną. – Veedrac