Consider: uint fun(); int gun(); ... int[] a = new int[5]; a[fun] = gun;
Which should be evaluated first, fun() or gun()? It's a rather arbitrary decision. C/C++ don't even define an order. Python chooses left-to-right, EXCEPT for assignment, which is right-hand side first. Lisp and C# choose consistent left-to-right. I don't like exceptions and I'd like everything to be left-to-right. However, this leads to some odd cases. Consider this example in TDPL:
import std.stdio, std.string; void main() { uint[string] dic; foreach (line; stdin.byLine) { string[] words = split(strip(line)); foreach (word; words) { if (word in dic) continue; // nothing to do uint newID = dic.length; dic[word] = newID; writeln(newID, '\t', word); } } } If we want to get rid of newID, we'd write: writeln(dic.length, '\t', word); dic[word] = dic.length; by the Python rule, and writeln(dic.length, '\t', word); dic[word] = dic.length - 1; by the C# rule. What's best? Andrei