First Draft: Static Single Assignment
Peter C
peterc at gmail.com
Fri Nov 21 10:04:45 UTC 2025
On Friday, 21 November 2025 at 09:48:57 UTC, Peter C wrote:
>
and forloops? (a fuller coverage of examples in this post)
-----
module mymodule;
@safe:
private:
import std;
void main()
{
int[] arr = [100, 200, 300];
int extra = 999;
foreach (fixed ref element; arr)
{
// element is now bound as an alias to arr[i]
element = 500; // OK: modifying the value being referenced
-> arr[i]
element = extra; // ERROR (SAA): Cannot reassign a fixed
reference binding.
}
for (fixed int i = 0; i < arr.length; i++) // SAA on index 'i'
{
i = 5; // ERROR (SAA): Cannot reassign the fixed index 'i'
// ...
}
for (int i = 0; i < arr.length; i++)
{
fixed ref int currentElement = arr[i];
currentElement = 500; // ok -> modifies arr[i]
currentElement = extra; // ERROR (SAA): Cannot reassign a
fixed reference binding.
}
}
-----
More information about the dip.development
mailing list