On Tue, 22 Sep 2009 19:06:22 -0400, Christopher Wright <[email protected]> wrote:
Robert Jacques wrote:
On Tue, 22 Sep 2009 07:09:09 -0400, bearophile <[email protected]> wrote:
Robert Jacques:
[snip]
Also, another issue for game/graphic/robotic programmers is the ability to
return fixed length arrays from functions. Though struct wrappers
mitigates this.

Why doesn't D allow to return fixed-sized arrays from functions? It's a basic feature that I can find useful in many situations, it looks more useful than most of the last features implemented in D2.

Bye,
bearophile
Well, fixed length arrays are an implicit/explicit pointer to some (stack/heap) allocated memory. So returning a fixed length array usually means returning a pointer to now invalid stack memory. Allowing fixed-length arrays to be returned by value would be nice, but basically means the compiler is wrapping the array in a struct, which is easy enough to do yourself. Using wrappers also avoids the breaking the logical semantics of arrays (i.e. pass by reference).

You could ease the restriction by disallowing implicit conversion from static to dynamic arrays in certain situations. A function returning a dynamic array cannot return a static array; you cannot assign the return value of a function returning a static array to a dynamic array.

Or in those cases, put the static array on the heap.

I'm not sure what you're referencing.

A function returning a dynamic array cannot return a static array;
This is already true; you have to .dup the array to return it.

you cannot assign the return value of a function returning a static array to a dynamic array.
This is already sorta true; once the return value is assigned to a static-array, it may then be implicitly casted to dynamic.

Neither of which help the situation.

Reply via email to