Cấu trúc dữ liệu chức năng (chẳng hạn như Hash Array Mapped Trie được sử dụng trong Haskell/Clojure/Scala) dựa vào nhiều chia sẻ trong cấu trúc dữ liệu cơ bản. Ví dụ: nếu chúng tôi triển khai insert
trên loại dữ liệu giống như bản đồ thường được triển khai bằng cách sao chép đường dẫn trên cây triển khai cấu trúc dữ liệu.Quy tắc vay của Do Rust có cản trở các cấu trúc dữ liệu chức năng không?
Cho rằng các cấu trúc dữ liệu này phụ thuộc rất nhiều vào việc chia sẻ (và không có chủ sở hữu chính) các giá trị cơ bản, sẽ vay theo cách thực hiện các cấu trúc như vậy?
Như đã nói, câu hỏi này có vẻ quá rộng hoặc dựa trên ý kiến. Bạn đã thử một cái gì đó và nó đã không hoạt động? Bạn có biết về "lối thoát" mà 'không an toàn' cung cấp không? Câu trả lời nào sẽ hợp lệ ở đây? Có một thùng [hamt] (https://crates.io/crates/hamt/), điều đó có cung cấp câu trả lời không? – Shepmaster
Xem câu trả lời cho [câu hỏi này] (https://stackoverflow.com/questions/31227269/generic-types-ownership-and-persistent-data-structures?rq=1). Nó giải thích rằng 'Rc' cho phép nhiều chủ sở hữu của cùng một dữ liệu, và trong khi nó có thể giống như' .clone() 'thực hiện một bản sao, đó là một bản sao nông không thực sự sao chép dữ liệu. Nó thực sự bất biến cho phép điều này xảy ra. Thùng hamster sử dụng 'Rc' [ở đây] (https://github.com/rainbowbismuth/hamt-rs/blob/master/src/lib.rs#L801). –
Quyền sở hữu không thể chia sẻ chung thường đơn giản bằng cách làm cho GC rõ ràng. Dữ liệu tuần hoàn là một phần có vấn đề. – Veedrac