Здравствуйте, D. Mon, Вы писали:
DM>Там внутри довольно четкое разделение на компиляцию в байткод и исполнение его ВМ. Есть даже разделение — байткод можно сохранить в файл, а потом многократно исполнять.
Это не имеет ровным счетом никакого значения. Это детали реализации интерпретатора. В наше время интерпретировать текст скриптов отваживаются редко.
VD>>На будущее. Интерпретация — это исполнение программы другой программой, а не процессором (железякой).
DM>Тогда Java — интерпретатор.
Ява имеет разные реализации. Есть чисто интерпретирующие VM, а есть VM поддерживающие JIT-компиляцию (т.е. компиляцию кода перед первом его исполнением). Более того JIT-ер от Sun-а может какие-то куски кода интерпретировать (если он посчитает, что они не критичны для производительности или они не выполняются более одного раза), а какие-то компилирует.
Дотнет, как не странно, тоже обладает разными VM. Основная, используемая на ПК, обладает JIT-компилятором который прекомпилирует весь код. Более того большая часть системных сборок прекомпилируется еще при инсталляции дотнета.
VD>>Вот компиляцией можно назвать и преобразование текста в байткод.
DM>Питон, Руби и Луа это делают.
Это делают 90% интерпретаторов.
VD>>Но если говорят о интерпретирующих и компилирующих ЯП или средах, то под компилятором обычно понимают нечто транслирующее код в нэйти-код процессора.
DM>Тогда Nemerle — не компилятор.
Правильно, так как Nemerle — это язык. Но вот его компилятор генерирует байткод, которые перед исполнением компилируется в машинный код с помощью JIT-компилятора дотнета (или прекомпилятора — ngen.exe). Так что в итоге Nemerle — это компилируемый язык. Именно по этому код написанный на нем по скорости мало отличается от кода написанного на С.