Основная причина - избегать неопределенного поведения. В C аргументы порядка оцениваются как неопределенные. Например, если у вас есть что-то вроде
int x = 1;
foo(x++, x++);
Вы можете звонить foo(1, 2)
или foo(2, 1)
.
В Вале порядок определен; это будет foo(1, 2)
. Для этого Vala иногда нужно использовать временные переменные, поэтому код превращается в нечто вроде:
int x = 1;
int tmp0 = x++;
int tmp1 = x++;
foo(tmp0, tmp1);
Чтобы генератор кода был простым, временные переменные просто генерируются.
Любой компилятор C легко оптимизирует временные переменные (вам не нужно -O3
, для этого более чем достаточно -O1
), поэтому нет особых оснований менять valac для устранения временных переменных. Единственным недостатком является то, что сгенерированный код немного уродливее.