2015-06-04 6 views
2

Я понимаю, что все еще в движении, но почему Weak ссылается на 2 разных места в документации?Какую библиотеку использовать для слабых ссылок

std::rc::Weak - http://doc.rust-lang.org/stable/std/rc/struct.Weak.html

alloc::rc::Weak - http://doc.rust-lang.org/stable/alloc/rc/struct.Weak.html

Может быть, я что-то не хватает, но с той лишь разницей, я вижу в двух есть функция FMT подписи:

impl<T> Debug for Weak<T> where T: Debug 
fn fmt(&self, f: &mut Formatter) -> Result<(), Error> 

против

impl<T: Debug> Debug for Weak<T> 
fn fmt(&self, f: &mut Formatter) -> Result 

Так какой я должен использовать? Они оба обозначены как «нестабильные».

ответ

7

Стандартная библиотека Rust на самом деле состоит из нескольких взаимосвязанных ящиков. std, помимо того, что он содержит некоторые свои функции, действует как «фасад» над этими другими ящиками, публично реэкспортируя биты, которые были стабилизированы.

Существует, по сути, только один Weak: один в alloc. Просто std реорганизует его. Что же касается какой из них использовать: если что-то доступно через std, использовать его через std: это путь, который вряд ли изменится ...

... кроме случаев, когда речь идет о неустойчивых функций, из которых Weak является одна: он нестабилен, поэтому никаких гарантий нет.

+0

Еще одна разница между фасадом 'std' и другими предметами, из которых он исходит, состоит в том, что' std' был в основном стабилизирован, но другие ящики неустойчивы. –

+0

@ DK. в то время как я ** очень ** новичок в ржавчине, я понимаю, что вы говорите ... но это, естественно, приводит к следующему вопросу, почему? Почему вещи реэкспортируются? Разве это не приводит, естественно, к путанице (по крайней мере, мое) в отношении того, что использовать? – wspeirs

+0

@wspeirs Не раз кто-то говорит «просто используйте версию в' std' ». Он реэкспортируется, потому что это только ** 'std', который был стабилизирован. Другие ящики более или менее представляют собой детали реализации, от которых вы не должны зависеть. –