Я всегда удивляюсь, почему компиляторы не могут понять простые вещи, которые очевидны для человеческого глаза. Они делают много простых оптимизаций, но никогда не являются чем-то даже немного сложным. Например, этот код занимает около 6 секунд на моем компьютере для печати значения нуля (с использованием java 1.6):
int x = 0;
for (int i = 0; i < 100 * 1000 * 1000 * 1000; ++i) {
x += x + x + x + x + x;
}
System.out.println(x);
Совершенно очевидно, что x никогда не изменяется, поэтому независимо от того, как часто вы добавляете 0, он остается равным нулю. Таким образом, компилятор мог теоретически заменить это на System.out.println(0).
Или даже лучше, это занимает 23 секунды:
public int slow() {
String s = "x";
for (int i = 0; i < 100000; ++i) {
s += "x";
}
return 10;
}
Сначала компилятор мог заметить, что я на самом деле создаю строку s 100000 "x", чтобы она могла автоматически использовать s StringBuilder или даже лучше сразу заменить ее на результирующую строку, поскольку она всегда одна и та же. Во-вторых, он не признает, что я вообще не использую эту строку, поэтому весь цикл можно отбросить!
Почему, после того, как многие трудовые ресурсы входят в быстрые компиляторы, они все еще настолько относительно тупые?
EDIT. Конечно, это глупые примеры, которые никогда нельзя использовать нигде. Но всякий раз, когда мне приходится переписывать красивый и очень читаемый код во что-то нечитаемое, чтобы компилятор был счастлив и создавал быстрый код, мне интересно, почему компиляторы или какой-либо другой автоматизированный инструмент не могут сделать это для меня.