scope escaping
Dicebot
public at dicebot.lv
Thu Feb 6 14:04:02 PST 2014
On Thursday, 6 February 2014 at 15:47:44 UTC, Adam D. Ruppe wrote:
> ...
Had only quick look at it but here are some things to remember
that I have realised when drafting my own scope proposal:
1) passing scope arguments:
/* what to put here as qualifier? */ int[] foo(scope int[] input)
{
return input; // this should work
int[5] internal; // implictly scope
return internal[]; // but this shouldn't
}
I think it makes sense to prohibit `scope` as explicitly named
return attribute but make it inferrable via `inout`.
2) Transitivity & aggregation:
struct A
{
scope int[] slice1;
int[] slice2;
int value;
}
void foo(int[] input) { }
void boo(ref int input) { }
void main()
{
int[5] stack;
A a; // is it different from "scope A a;"?
a.slice = stack[]; // guess should be ok
a.slice2 = new int[]; // should this?
foo(a.slice1); // obviously fail
foo(a.slice2); // but does this?
boo(a.value); // I'd expect this to fail
}
Main problem with strict scope definition is that most seem to
inuitively get what it is expected to do but defining exact set
of rules is rather tricky.
More information about the Digitalmars-d
mailing list