Компиляторы разработаны, чтобы быть предсказуемы . Это может заставить их выглядеть глупыми время от времени, но это в порядке. Цели разработчика компилятора
, необходимо быть в состоянии посмотреть код и сделать разумные прогнозы о его производительности.
Небольшие изменения в коде не должны приводить к резким различиям в производительности.
, Если небольшое изменение смотрит на программиста как он, должен улучшить производительность, это не должно, по крайней мере, ухудшать производительность (если удивительные вещи не происходят в аппаратных средствах).
Все эти критерии препятствуют "волшебной" оптимизации, которая применяется только к угловым случаям.
Обоим из Ваших примеров обновили переменная в цикле, но не используемые в другом месте . Этот случай на самом деле довольно трудно взять, если Вы не используете своего рода платформу, которая может объединить устранение невыполняемого кода с другой оптимизацией как распространение копии или постоянное распространение. К простой оптимизатор потока данных переменная не выглядит мертвой. Для понимания, почему эта проблема трудна посмотрите статья Lerner, Рощи и Камер в 2002 POPL , который использует этот самый пример и объясняет, почему это твердо.
Так же, как в JavaScript: fromCharCode . Если y
является целым числом, начиная с 1
для A:
String.fromCharCode(64+y)+x
для этого, например, можно использовать функцию изCharCode в классе String.
: String.fromCharCode(ascii code);
.