ドコモおおおおおおおおお
> The Rc::clone(&from) syntax is the most idiomatic because it conveys more explicitly the meaning of the code.
https://doc.rust-lang.org/stable/std/rc/index.html#cloning-references
あー公式ドキュメントがそういう書き方推しなのか(そういう問題じゃなくて、 add_ref とかそういう表現にするべきだよなという意見を僕は持ってるけど)
たとえば
#[derive(Clone)]
struct Foo {
bar: Rc<Bar>,
baz: Baz,
}
みたいなことができてほしいとき、 Rc<T>: Clone がないと自明な impl Clone for Foo { ... } を手書きすることになってしまう
これは Rc が Clone であるという前提で語ればそうだけど、そうじゃなかった場合、そもそも Rc を含む構造体の clone ってどういう意味? からスタートするので、実際に Clone を実装するなら、手書きする方が筋がいい
たとえば raw pointer の Clone / Copy がアドレスのコピーであることに疑いはないと思うんだけど、よーするにポインタとそれが指すオブジェクトは区別されているわけね。
それで Box / Rc / Arc も Deref を実装した smart pointer であるわけで、その Clone は smart pointer が指すオブジェクトではなく smart pointer そのものの「複製」を意味していると考えるのが自然だと思うんですよ。
であれば、 Rc の Clone 実装が refcount 増加であっても不自然さはないと考えられる
Box では clone は中身の clone になるので、そもそも Rust の文脈でポインタのコピーというもの自体が不自然では?