Функциональные структуры данных (такие как Hash Array Mapped Trie, используемые в Haskell/Clojure/Scala) полагаются на много общего в базовой структуре данных. Например, если мы реализуем insert
по типу данных типа карты, который обычно реализуется путем копирования по пути на дереве, которое реализует структуру данных.Правильные ли правила заимствования Руста мешают функциональным структурам данных?
Учитывая, что эти структуры данных сильно зависят от общих (и не основных владельцев) базовых значений, будут ли заимствования мешать реализации таких структур?
Как сформулировано, этот вопрос кажется слишком широким или основанным на мнениях. Вы что-то пробовали и не работали? Знаете ли вы, что «скрытый люк», который «небезопасно» обеспечивает? Какой ответ будет здесь действительным? Есть ли [hamt crate] (https://crates.io/crates/hamt/), это дает ответ? – Shepmaster
См. Ответ на [этот вопрос] (https://stackoverflow.com/questions/31227269/generic-types-ownership-and-persistent-data-structures?rq=1). В нем объясняется, что «Rc» позволяет нескольким владельцам одних и тех же данных, и хотя он может выглядеть так: '.clone()' делает копию, это мелкая копия, которая фактически не копирует данные. На самом деле это неизменность, которая позволяет этому случиться. Ящик hamt использует 'Rc' [здесь] (https://github.com/rainbowbismuth/hamt-rs/blob/master/src/lib.rs#L801). –
Совместное неизменное владение, как правило, просто, сделав GC явным. Циклические данные являются проблематичной частью. – Veedrac