T[new]

bearophile bearophileHUGS at lycos.com
Sun Aug 9 14:16:31 PDT 2009


Now there are four ways to create/use "arrays" in D2:
- the * syntax on a raw memory block, like in C.
- fixed sized arrays, that are just a pointer somewhere. they may even become fully value types........
- the slice struct, about 2 * size_t.sizeof
- the new reference arrays, a pointer on the stack, plus a 3 items struct somewhere, probably on the heap. If it doesn't escape the scope LDC may be able to put it too on the stack. The GC may allocate a space of 4 items anyway for it, so there's an item wasted.
:-)
In the meantime I have understood that the slice has to be the default syntax to keep the compatibility with C :-)


Walter Bright:

> Yes. Clearly, those properties will have to be functions under the hood. 
> So T[new] operations will be a bit slower than for slices. For faster 
> indexing, you'd probably want to do:
> auto slice = a[];
> and then operate on the slice.

Let's hope such functions can be inlined. Assuming they can be inlined, a smart compiler can remove some of those ifs where it knows the array surely exists (virtual machines today are usually able to remove some array bound tests using similar tricks). I don't hold my breath for D2 to become this smart...

Bye,
bearophile



More information about the Digitalmars-d mailing list