Post #92
305
Rust увлечен идеей четкого владения данными. Вы начинаете со значения в стеке и перемещаете его. Когда вам нужно получить доступ к значению из нескольких мест, вы его копируете. Если копирование слишком дорого или неуместно, вы начинаете использовать ссылки. Ссылки могут быть ограничены сроком службы. Когда ансамбль времени жизни становится слишком сложным или невозможным для статического выражения, вы начинаете помещать свои значения в кучу и передавать указатели. Наиболее часто используемые типы указателей - это Box <T> и Rc <T>. Сами указатели являются переменными стека и, следовательно, подчиняются одному и тому же принципу владения. Box единолично владеет значением, на которое он указывает, поэтому мутации упрощаются. Rc обеспечивает долевое владение. С точки зрения компилятора, совместное владение означает отсутствие изменений. Если вам нужно изменить общее значение, компилятор вам больше не поможет. Вы отказываетесь от статического доказательства правильности и обманываете компилятор с помощью Rc<RefCell<T>>. RefCell обеспечивает фиктивную неизменяемость во время компиляции и позволяет получать изменяемую ссылку во время выполнения. Но за магию всегда есть цена! (c) Цена RefCell - паника во время выполнения, когда вы случайно получаете две изменяемые ссылки на одно и того же значение.
Мне определенно нравится качество этого перевода. Google Translate rules!
P.S. скоро допишу очередную дилетансткую статью по Rust'у






