On Sunday, 4 November 2012 at 05:31:41 UTC, Jonathan M Davis wrote:
I just thought that I should bring greater attention to

http://d.puremagic.com/issues/show_bug.cgi?id=8838

As it stands, I think that the slicing static arrays being considered @safe is a major hole in SafeD's safety, and I think that it's one that many of us aren't aware of. But there seems to be some resistance to outright making the slicing of static arrays @system within that bug report, and I recall similar resistance in the thread that prompted that bug report (unfortunately, I don't
remember what thread it was - somewhere in D.Learn I think).

So, I was wondering what the general consensus on this was. Should slicing static arrays be considered @system? I honestly don't see how we could do otherwise without the compiler being way, way smarter at detecting escaping
references than is ever going to happen.

Also, I really think that if we're agreed that this change needs to be made that it should then be made sooner rather than later, because it's going to
break code which actually tries to use @safe.

- Jonathan M Davis

Just as a note, if slicing static arrays cannot be @safe, then type-safe variadic functions can't be @safe either, as it essentially does the same thing, just implicitly:

    void foo(int[] a...)
    {
// 'a' is a slice of stack memory when foo *isn't* called with an explicit array.
    }

The compiler does perform its simple escape analysis on such parameters, but as we know, it's not very smart.

I guess another solution to this particular case is to make it generate a dynamic array when foo is @safe, but I don't think anyone is excited about this option...

Then there's the scope parameter storage class. The compiler isn't very smart about scope parameters either.

So what do we do about all these related issues?

Reply via email to