First Draft: Static Single Assignment

user1234 user1234 at 12.de
Mon Nov 17 11:52:53 UTC 2025


On Monday, 17 November 2025 at 11:28:43 UTC, Nick Treleaven wrote:
> On Monday, 17 November 2025 at 10:25:47 UTC, user1234 wrote:
>> 1. The description requires to specify that pass-by-ref a 
>> final is (_always almost_) illegal.
>
> The DIP example shows that non-mutable ref to a final variable 
> is OK, despite it saying:
>
>> A ref cannot be taken of a final declaration:
>
> I think that sentence should be "A mutable ref cannot...".
>
>> 2. what about parameter storage classes ? (since the 
>> StorageClass rule is shared by VarDecl and Param)
>>
>> ```d
>> void v(final int p = 0);
>> v(1);
>> ```
>>
>> VS
>>
>> ```d
>> void v(final int p = 0);
>> v();
>> ```
>
> I think both calls should work. `p` can't be modified inside 
> v's body.
>
>> is the default argument stands for a single assignment ?
>
> The default argument is only used when there's no argument.
>
>> which leads to ask what is the right behavior (given first 
>> note) for
>>
>> ```d
>> void v(final ref int);
>> final int arg;
>> v(arg);
>> ```
>
> I think that should work, because the call can't modify `arg`.

Alright. Maybe a clarification like "a final parameter can never 
be reassigned in the body" could be added. To make things very 
clear.


More information about the dip.development mailing list