View mode: basic / threaded / horizontal-split · Log in · Help
March 17, 2012
Immutable static arrays
Is this a bug?

	import std.stdio;
	void main() {
		immutable(int)[4] a;
		immutable(int[4]) b;
		writeln(typeid(a));
		writeln(typeid(b));
	}

Output:

	immutable(int[4])
	immutable(int[4])

So there's no tail-const type for static arrays?

More to the point, how should AA's with immutable static array keys be
implemented? The current implementation doesn't work at all because the
input static array can't be assigned to the Slot (the static array field
in Slot is completely immutable, even from the Slot ctor???).


T

-- 
It is widely believed that reinventing the wheel is a waste of time; but
I disagree: without wheel reinventers, we would be still be stuck with
wooden horse-cart wheels.
March 17, 2012
Re: Immutable static arrays
"H. S. Teoh" <hsteoh@quickfur.ath.cx> wrote in message 
news:mailman.803.1331956296.4860.digitalmars-d@puremagic.com...
> Is this a bug?
>
> import std.stdio;
> void main() {
> immutable(int)[4] a;
> immutable(int[4]) b;
> writeln(typeid(a));
> writeln(typeid(b));
> }
>
> Output:
>
> immutable(int[4])
> immutable(int[4])
>
> So there's no tail-const type for static arrays?
>
> More to the point, how should AA's with immutable static array keys be
> implemented? The current implementation doesn't work at all because the
> input static array can't be assigned to the Slot (the static array field
> in Slot is completely immutable, even from the Slot ctor???).
>
>
> T
>
> -- 
> It is widely believed that reinventing the wheel is a waste of time; but
> I disagree: without wheel reinventers, we would be still be stuck with
> wooden horse-cart wheels.

This is correct.  It's the same as for primitive types.  Because they 
implicitly convert to immutable, AAs should store a mutable copy.  T[N] 
should be handled almost the same as T.
Top | Discussion index | About this forum | D home