static arrays becoming value types

Max Samukha spambox at d-coding.com
Tue Oct 20 02:59:12 PDT 2009


On Mon, 19 Oct 2009 18:50:46 -0700, Walter Bright
<newshound1 at digitalmars.com> wrote:

>Currently, static arrays are (as in C) half-value types and 
>half-reference types. This tends to cause a series of weird problems and 
>special cases in the language semantics, such as functions not being 
>able to return static arrays, and out parameters not being possible to 
>be static arrays.
>
>Andrei and I agonized over this for some time, and eventually came to 
>the conclusion that static arrays should become value types. I.e.,
>
>   T[3]
>
>should behave much as if it were:
>
>   struct ??
>   {
>      T[3];
>   }
>
>Then it can be returned from a function. In particular,
>
>   void foo(T[3] a)
>
>is currently done (as in C) by passing a pointer to the array, and then 
>with a bit of compiler magic 'a' is rewritten as (*a)[3]. Making this 
>change would mean that the entire array would be pushed onto the 
>parameter stack, i.e. a copy of the array, rather than a reference to it.
>
>Making this change would clean up the internal behavior of types. 
>They'll be more orthogonal and consistent, and templates will work better.
>
>The previous behavior for function parameters can be retained by making 
>it a ref parameter:
>
>    void foo(ref T[3] a)

Hooah!

I guess their .init value won't be fixed to be consistent with other
types?



More information about the Digitalmars-d mailing list