On Friday, 5 December 2014 at 20:55:55 UTC, Walter Bright wrote:
On 12/5/2014 7:27 AM, Steven Schveighoffer wrote:
Can someone who knows what this new feature is supposed to do give some Ali Çehreli-like description on the feature? Basically, let's strip out the *proof* in the DIP (the how it works and why we have it), and focus on how it is to be
used.

I still am having a hard time wrapping my head around the benefits and when to use scope, scope ref, why I would use it. I'm worried that we are adding all this complication and it will confuse the shit out of users, to the point where
they won't use it.

The tl;dr version is when a declaration is tagged with 'scope', the contents of that variable will not escape the lifetime of that declaration.

It means that this code will be safe:

   void foo(scope int* p);

   p = malloc(n);
   foo(p);
   free(p);

The rest is all the nuts and bolts of making that work.

<brainstorm>
What about also adding the inverse of scope? Then scope can be inferred. As in:

```
void foo(int* p);
void free(P)(consume P* p);

p = malloc(n);
foo(p);  // here foo() gets scope, since free consumes it.
free(p);
```

So you do not need to write scope everywhere. And it would prevent this code:

```
{
  free(p);
  free(p);  // Error: p already consumed
}
```
</brainstorm>

Reply via email to