Comments 10
Это весьма странная статья. Автор не упоминает о Clone и Copy типажах, вместо этого он запутывает новичка персистентными коллекциями, примерами с числами, которые тоже значения, но почему-то имеют отличный от векторов юз кейс.
Что касается опросника, то у меня много вопросов к его содержимому. В отличие от других языков, Rust не пытается впихнуть в std всё что можно. Существует отличный крейт rpds, который можно использовать, если возникает нужда в персистентных коллекциях.
>Из всего вышесказанного следует, что персистентные коллекции в Rust не обязательно должны иметь тот же самый интерфейс, что и обычные.
Оригинал:
>This implies to me that persistent collections in Rust don’t necessarily want to have a “different interface” than ordinary ones.
Как раз смысл статьи в том, что персистентные коллекции в Rust могут иметь тот же интерфейс, что и обычные, благодаря системе владения.
Что-то я так и не понял, в чём профит от этого персистентного вектора. По всем параметрам хуже обычного, ну и зачем он тогда нужен?
Вот ссылка на комменты rpds с асимптотической сложностью для вектора. Копирование за O(1)
— тот параметр, который превосходит обычный вектор. Для желающих почитать теорию: Understanding Clojure's Persistent Vectors, pt.1, Understanding Clojure's Persistent Vectors, pt.2
.
Крайне советую почитать ридми rpds, толково описано.
А вообще у этого есть реальный профит, когда тебе надо делать undo/redo и хранить историю изменений или заменять значение по индексу с возможностью отменить сделанные изменения. дерево git — персистентная структура. Смотрите доклад Inheritance Is The Base Class of Evil by Sean Parent. history_t
и есть тот самый персистентный вектор.
Rust: «Векторы — это значения»