First Draft: Static Single Assignment
Peter C
peterc at gmail.com
Thu Nov 27 22:23:33 UTC 2025
On Thursday, 27 November 2025 at 19:41:18 UTC, Jonathan M Davis
wrote:
>
> ...
> Of course, personally, I don't think that this feature adds
> enough value to be worth adding at all, but it does feel very
> much like something being welded onto the language to solve a
> corner case that doesn't work with const rather than having a
> more holistic solution.
>
> ...
> - Jonathan M Davis
Here is a 'simple' example of its value:
class Data { int value = 1; }
void main()
{
// const Data c = new Data();
//c.value = 42; // Error: cannot modify `const` expression
`c.value`
//c = new Data(); // Error: cannot modify `const` expression
`c` c = new Data();
final Data c = new Data();
c.value = 42; // fine.
c = new Data(); // Error (SAA): Cannot reassign a 'final'
variable.
// .....
// Pass the fixed reference to the performCheck function
performCheck(c);
// .....
// We have a guarantee that here, 'c' will still refer to the
same object it was initialized with
writeln("\nValue: ", c.value);
}
// The compiler guarantees that performCheck cannot
// introduce a side effect by reassigning the reference.
//
void performCheck(final Data obj)
{
obj = new Data(); // Error (SAA): Cannot reassign a 'final'
variable.
obj.value = 1; // fine. (Mutating the object is allowed)
}
More information about the dip.development
mailing list