Rvalue references - The resolution
Jonathan M Davis
jmdavisProg at gmx.com
Thu May 9 14:15:21 PDT 2013
On Thursday, May 09, 2013 21:30:00 Rainer Schuetze wrote:
> On 04.05.2013 20:33, Walter Bright wrote:
> > Static Compiler Detection (in @safe mode):
> >
> > 1. Do not allow taking the address of a local variable, unless doing a
> > safe type 'paint' operation.
>
> I'm not exactly sure what a "safe type paint operation" does, and
> whether the following has already been considered, but I just like to be
> assured it has:
>
> Taking a slice of a stack allocated fixed-size array also includes
> taking its address, so it is also forbidden? This might disallow any
> range based algorithms on the static array.
Asuming that taking the slice of a static array is treated like ref (as @safe)
rather than like taking the address of a local variable is (as @system), then
we'll have to add similar runtime checks for arrays, and that would be way,
way worse given that without purity, they could be assigned to a global
dynamic array (or could be assigned to a member variable in a return value
even with pure functions). It's fairly clean for ref simply because ref is a
storage class and not a type constructor. Array slices on the other hand could
escape all over the place.
I'm inclined to believe that taking a slice of a static array should be
considered @system just like taking the address of a local variable is
considered @system. If I could, I'd even disallow the implicit slicing of
static arrays when passing them to functions taking dynamic arrays, but I
question that Walter would go that far. But I don't know what we can do other
than making slicing static arrays @system given how difficult it would be to
have runtime checks catch that.
I'd brought this issue up in the past but had not remembered it during the
recent discussions on ref safety. Good catch. We don't want any holes like
this to persist.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list