List of all permitted operations on scope function parameters.

user1234 user1234 at 12.de
Sun Apr 17 12:35:25 UTC 2022


On Sunday, 17 April 2022 at 08:57:40 UTC, Loara wrote:
> On Friday, 15 April 2022 at 23:17:26 UTC, Salih Dincer wrote:
>> On Friday, 15 April 2022 at 21:57:28 UTC, Loara wrote:
>>> Documentation page 
>>> https://dlang.org/spec/function.html#scope-parameters about 
>>> `scope` function parameters says simply that a scoped 
>>> parameter "can't escape that function's scope". This concept 
>>> can be very tricky with some non-trivial algebra of struct's 
>>> members and pointers, so I think it's better to provide a 
>>> general algorithm to state if an expression/statement 
>>> involving one or more `scope` function parameters is valid or 
>>> not.
>>
>> **scope** and **return** are both my nightmare.  
>> ```scope(exit) // blah blah```, no problem and even ```return 
>> result``` It's okay...
>>
>> But when I come across these elsewhere, it's scary.  
>> Especially in function parameters!
>>
>> @SDB79
>
> https://github.com/Loara/Rethink_scope_in_D/blob/main/README.md

The first example you give is actually well rejected but only in 
`@safe` code:

```d
int* stack_allocate(size_t) @safe;

void test() @safe
{
     scope int *a;
     {
         scope int *b = stack_allocate(1);
         a = b;
     }
}
```

> /tmp/temp_7F010929C2D0.d:8:11: Error: scope variable `b` 
> assigned to `a` with longer lifetime

it's not mentioned in the specs for `@safe` however.


More information about the Digitalmars-d mailing list