On Mon, 05 May 2014 22:16:58 -0400
Nick Sabalausky via Digitalmars-d-learn
<digitalmars-d-learn@puremagic.com> wrote:

> On 5/5/2014 10:11 PM, Nick Sabalausky wrote:
> > Is this kinds stuff a sane thing to do, or does it just work by
> > accident?:
> >
> > void modify(ubyte[] dynamicArr)
> > {
> >      dynamicArr[$-1] = 5;
> > }
> >
> > void main()
> > {
> >      ubyte[4] staticArr = [1,1,1,1];
> >      modify(staticArr);
> >      assert(staticArr == [1,1,1,5]);
> > }
>
> Duh, it's just using a normal slice of the static array...
>
> // Roughly:
> dynamicArr.ptr = &staticArr;
> dynamicArr.length = typeof(staticArr).sizeof;
>
> So all is well, and deliberately so. Pardon the noise.

It's definitely deliberate, though I think that it's a flaw in the language's
design. IMHO, static arrays should never be automatically sliced, but
unfortunately, changing that would break too much code at this point. The
biggest problem is the fact that it's inherently unsafe, though unfortunately,
the compiler currently considers it @safe:

https://issues.dlang.org/show_bug.cgi?id=8838

- Jonathan M Davis

Reply via email to