Well, I don't think that matters (especially because of the blanket
impl ToOwned for T where T: Cloned), but
Cow is completely and drastically different from
Arc for another reason.
Cow is designed to be single-owner. When you use a Cow, you essentially say "I don't need ownership but I don't mind if I happen to have it". By using Arc, you state that "I need shared ownership". The
Cow::into_owned method optimizes for the case where you already have ownership, accounting for the possibility that you didn't, so far. In contrast, with
Arc, you unconditionally have (shared) ownership, and the optimization is about uniqueness. So calling it
into_owned() doesn't make much sense, because the wrapped value is already owned.
make_owned() is subpar for the same reason.
take() is completely out of question. It is used for unconditionally stealing a value out of a place (vis.
Option::take()), without the hidden possibility of a potentially expensive clone. Furthermore, this proposed method on
Arc would not invalidate the other Arcen, but it would consume the one it is being called on – this is also completely inconsistent with the other two
takes() accepting a mut ref.