[Nickle] Nickle bug/misfeature: storage for growable arrays of growable arrays

Bart Massey nickle at po8.org
Sat Jan 15 11:48:43 PST 2005


In message <E1CptFi-0007HZ-8p at evo.keithp.com> you wrote:
> Around 0 o'clock on Jan 15, "Bart Massey" wrote:
> 
> > Nickle has a nice feature wrt arrays: storage is
> > auto-allocated.  For growable arrays, this means that
> > this works
> 
> Urgh.  Nickle has two separate mechanisms for initializing storage, one is 
> when variables are declared -- the compiler emits code to create an 
> appropriate value if none is provided.  The second mechanism is when an 
> uninitialized box is fetched -- the box is filled with a default value for 
> the specified type, but only if it is of type struct or
> union.

Sigh.  Do we want this
   struct {int x;} s;
to be different from this?
   struct {int x;} s = {};
I think there's a case to be made for this distinction.  If
so, it's clear what to do with structures, unions, and
normal arrays, and shouldn't require the current lazy
initialization mechanism.

For growable arrays, it gets more complicated, since
growable arrays of objects (of any type) don't have a
"default value" like hashes do.  This should probably be
fixed.  Perhaps things like
   int[...][...] a = {{} ...};
should work?

> Also, what should I do with '*' arrays?  Any size I pick seems wrong.

Given the previous it seems clear that a * array that is
uninitialized is not an array.  This makes things much easier.

Am I confused somewhere?

    Bart



More information about the Nickle mailing list