On 02/15/2011 03:10 PM, Steven Schveighoffer wrote:
On Mon, 14 Feb 2011 22:59:52 -0500, Jonathan M Davis <[email protected]> 
wrote:


It's because an Array is not a range. Dynamic arrays are a bit special in that
they're both a container and a range. An Array is just a container. But
honestly, you wouldn't really want it to work.

Dynamic arrays are not containers. They do not own the data they reference,
they just reference that data. In fact, the owner of the data is really the
runtime.

The naming of Array makes this a difficult thing to understand. An Array owns
its data, it manages the data, creates it, destroys it, and there is no way to
"slice" the Array into a smaller Array. It's a true reference type. A builtin
array is not really a container, so it really should be named differently. But
there's no way to change that.

[snip]

You don't have the problem with arrays that you'd have with user-defined
container types, because the semantics of arrays are a bit odd when you copy
them. So, if anything were faulty, it would be the built in arrays, not user-
defined container types like Array. It is quite handy to have arrays work how
they work, however, so that's not likely to change.

What is faulty is that they are called arrays. They are slices.

It took me some time to really understand builtin dynamic arrays, but since then have had no issue with them. Instead, I now appreciate their "bastard" semantics/behaviour ;-) But I agree they're weird, hard to explain, and their relation to ranges maybe still lacks integration.

How would speak about static arrays, from this point of view? Do you also consider them rather slices (view upon external data?) than containers in the strict sense of the term?

denis
--
_________________
vita es estrany
spir.wikidot.com

Reply via email to