Вводит ли в заблуждение тот факт, что промежуточный код выполняется на виртуальной машине - PullRequest
0 голосов
/ 07 июля 2010

Если я правильно понимаю, что я прочитал, то виртуальная машина - это компилятор промежуточного кода.Но никогда не говорится, что Delphi (как пример неуправляемого кода) работает в своем компиляторе.Разве было бы не так просто описать виртуальную машину как компилятор?

Ответы [ 3 ]

2 голосов
/ 07 июля 2010

Традиционный компилятор выполняет однократное преобразование из исходного кода в объектный код.Виртуальная машина, такая как JVM, использует комбинацию интерпретации (байт-кода) и компилятора "точно в срок" , который компилирует сегменты байт-кода в собственный код.Невозможно описать виртуальную машину в целом как компилятор.

1 голос
/ 07 июля 2010

Я думаю, что люди пытаются понять с помощью терминологии, что существует дополнительный уровень абстракции с виртуальными машинами. Итак, тот же код, но виртуальная машина для каждой платформы позволяет ему работать на этой конкретной платформе.

1 голос
/ 07 июля 2010

Есть компилятор, который переводит исходный код в код виртуальной машины (байт-код), и JIT-компилятор для кода виртуальной машины -> машинный код.ВМ - это стандарт, на который ориентирован компилятор исходного кода -> ВМ, а не конкретная реализация.Это может быть реализовано на реальной машине, и в этом случае не нужно будет выполнять JIT-компиляцию.

Виртуальная машина ближе к эмулятору (или, если ваш JIT действительно глуп, интерпретатор:))

...