alexs
Понимаешь, если в цикле надо сделать i действий с переменной (к примеру сложений), то любой компилируемый язык будет использовать счётчик текущего шага, короче постоянная проверка какого-то регистра.
И таких проходов 10000 штук.
Интерпретируемый же язык один раз может развернуть цикл по i, просто повторив код 10 раз перед первым проходом. И затем использовать этот развёрнутый алгоритм без проверок 10000 раз.
То, что 10000 проходов будут испонены быстрее - факт. А если и на компиляцию фрагмента потребуется ощутимо меньше времени чем на i*10000 проверок - то такой код будет работать ощутимо быстрее.
(не спорю, некоторая память при этом скушается)
Есть правда одно НО... реализовать подобное поведение и в компилируемых языках можно, просто программа должна иметь в себе сложные алгоритмы генерации run-time кода... Сложно конечно... но осуществимо.
Кстати в процессорах ARM9, насколько мне известно, существует технология Jazelle™, которая, согласно пресс релизу, в разы ускоряет скорость исполнения java кода.
А вот тут можно прочитать подробнее как это всё работает, и что существуют ещё более совершенные технологии.... (преобразование байт кода в машинные "на лету")
http://wiki.wapcity.ru/show/lang/ru/?text=Jazelle
Интересно, кстати, другое, ничего инновационного на самом деле тут нет...(кроме разве новых инструкций процессора в технологии RCT) Идеи такие уже давно имеются... Но, что самое интересное, они частично реализованы в FPC, где сначала создаётся промежуточный код, который потом компилируется под конкретную платформу...
Так вот, если такой код распостранять отдельно, то можно будет просто из существующих в настоящее время кросскомпиляторов собрать на разных платфорах "FPC Машины", которые будут генерировать и исполнять код "на лету" - очень быстро. Можно даже кусочки программы перекомпилировать во время исполнения, для вышеописанных оптимизаций

.
Тут конечно много подводных камней, но все эти проблемы разрешимы.