On Tue, Nov 19, 2013 at 4:43 AM, Daniel Micay <[email protected]> wrote: > > The expression ~([1, 2, 3]) has a different type than the expression > ~[1, 2, 3]. The former is an owned box containing a fixed size array > (~[int, ..3]) and the latter is a dynamic array (~[int]). > > The ~str and ~[T] types are *not* owned boxes in the current type > system. There has been a proposal for dynamically sized types which > would make them owned boxes, but I only like it as the path forwards > for traits/closures and not vectors. > > I don't think dynamic arrays/strings belong as built-in types > hard-wired into the language, especially with a confusing syntax like > this. They should be treated as other containers are. > > In what I think is a sane system, dynamic arrays would be a library > `Vec<T>` type just like we have `HashMap<K, V>` and will have other > vector types like `Rope<T>` or `SmallVec<T, N>`.
Agreed with this 100%. From a mental model perspective, you can't have ~foo mean "foo is boxed" everywhere in the language and then go "Oh but ~str and ~[T]? Yeah those are exceptions. You're mental model is wrong". *Everyone* is going to build this incorrect mental model of "putting ~ in front of a thing puts that thing in a box" and it's not the user's fault, it's Rust's fault for having this silly distinction. ~ in front of a type should mean one thing and one thing only. Otherwise we're just making life difficult for the users for no sensible reason. I read through all the Rust docs several times over the last few months, I have years of experience with C++ and thought I had a rock-solid understanding of ~T (it's just a unique_ptr<T>) and just a few days ago I learned that ~str and ~[T] are special. And I only learned about this by randomly browsing through rust-dev. I felt cheated a bit TBH. It's such an obvious design mistake IMO; everyone's going to get this wrong because it's counter-intuitive. It's like mutable default arguments in Python 2.x (which was thankfully fixed in 3.0). [I'm not trying to bash a different language, I know that's against the rules of the list. I'm just trying to draw a parallel with a different language design mistake that tripped up everyone as well.]
_______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
