Time ago with other people I have asked to replace the keyword "invariant" with "immutable" to create a run-time constant. But that wasn't the best choice because now in my functions I am using many immutable values; writing "immutable" often is boring and makes code longer. This is normal D2 code:
void foo(immutable int y) { immutable x = 5; if (i > x) { writeln(x); } if (i > x) writeln(x); } So using "val" (abbreviation for "value") as in Scala seems better to me: void foo(val int y) { val x = 5; if (i > x) { writeln(x); } if (i > x) writeln(x); } An alternative is to use Go syntax, and use the Pascal-like ":=" to denote a value assignment (function signature can't use := ). Here there is another idea from Go syntax: if the "then" clause of the "if" uses {} then the () around the test can be omitted: void foo(immutable int y) { x := 5; if i > x { writeln(x); } if (i > x) writeln(x); if i > x { // {} become necessary if you remove () writeln(x); } } Bye, bearophile