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