Change representation of dynamic arrays?
Walter Bright
newshound1 at digitalmars.com
Sat Oct 20 12:17:41 PDT 2007
Janice Caron wrote:
> On 10/20/07, Daniel Keep <daniel.keep.lists at gmail.com> wrote:
>> but what
>> about slicing code? I know that I use a lot of [lower..$-something]
>
> While this may be optimised for simple arrays, it poses much more of a
> problem for classes and structs which override opIndex() and
> opSlice(). The problem is that indeces in those functions are always
> specified as being relative to the beginning - there is no way to
> specify that an index should be considered relative to the end - so
> when you do a[0..$-1] in such a struct, the compiler has to convert
> $-1 into (a.length()-1). Then, inside opSlice(), to turn it back to a
> pointer you'd have to do (start+index).
>
> I know adds and subtracts are not that expensive, but given that this
> change is being talked about /because/ we want to get rid of a
> subtract, it is worth thinking about this.
>
> Presumably this will all sort itself out if we get iterators? When
> that happens, slice expressions could be rewritten by the compiler as
> iterator operations, which in turn would call opDereference() or
> opRange(), taking iterator parameters. Is that likely to happen, or
> will user-defined types always take the slow route?
If you have a user-defined struct, you get to decide how it is
implemented. How the built-in arrays are done under the hood shouldn't
be relevant.
More information about the Digitalmars-d
mailing list