Я изучаю движение инвариантного кода цикла как метод оптимизации кода при проектировании компилятора.Используемый пример:
for ( i=0; i<n; i++ )
buffer[i] = 10*i + x*x;
Может быть также оптимизирован для:
tmp = x*x
for (i=0; i<n; i++ )
buffer[i] = 10*i + tmp;
Чтобы избежать вычисления x * x более одного раза.
В учебной программеНапример, это решается бэкендом компилятора.
Мой вопрос заключается в том, является ли вообще хорошей практикой делать это явно в исходном коде (и является ли это более выгодным в некоторых языках, чем в других)?