Интерпретаторы против компиляторов против виртуальных машин

У меня есть вопрос об интерпретаторах, компиляторах и VM

Теперь я знаю разницу между интерпретаторами и компиляторами, но что отличается от VIRTUAL MACHINES от предыдущих 2? Каковы преимущества и недостатки виртуальной машины над интерпретаторами и компиляторами?

Спасибо большое

Ответы

Ответ 1

Виртуальная машина не является альтернативой компиляторам или интерпретаторам. Я думаю, вы думаете о компиляторе JIT, а именно о том, сколько VM реализовано.

Сама виртуальная машина - это именно то, что говорит название - это машина (процессор), которая на самом деле не существует. Например, большинство процессоров не имеют какого-либо внутреннего способа работы с распределением памяти или любого знания типов. Однако Java VM имеет инструкцию new, которая выделяет экземпляр определенного класса. Разработчики VM решили, что это достаточно важная концепция на этом языке, чтобы заслужить свой собственный код операции, который является основной единицей работы на виртуальной машине.

Преимущества создания собственного набора команд обычно сводятся к разрыву между длинными временами компиляции/оптимизации и медленными интерпретаторами. Например, когда вы компилируете Java-класс, вам не нужно делать какие-либо распределения регистров или вложения или какие-либо из этих традиционных компиляторов. JIT будет делать это позже, но только для тех частей кода, которые вы запускаете достаточно времени, и распространяетесь по ходу программы. Набор инструкций JVM достаточно близок к Java, что исходный компилятор является быстрым, и его просто и быстро читать для виртуальной машины, в отличие от исходного кода Java.

Что касается интерпретаторов против компиляторов JIT, то компромиссы, как правило, связаны с производительностью во время выполнения и временем разработки. JIT занимает гораздо больше времени, чтобы развиваться, но переводчик во время работы намного медленнее. Во многих случаях, например, в сценариях и на небольших и средних веб-сайтах, программа не работает достаточно долго, чтобы вы могли увидеть какие-либо преимущества использования JIT.

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

Ответ 2

Обычный английский

Компилятор преобразует один язык в другой. Например, С# в IL, Java в байтовый код, С++ в двоичный машинный код. На этапе компиляции выполнение не выполняется.

Интерпретатор интерпретирует (выполняет) одну строку за раз из исходного файла. Такие, как PHP, Perl, другие языки сценариев

Виртуальная машина может ссылаться на несколько вещей, две из которых я знаю:

  • Виртуальная машина, связанная с гипервизором, такая как Hyper-V, Xen. Они позволяют запускать несколько ОС на одном аппаратном обеспечении.
  • Время выполнения программного обеспечения, например Java Virtual Machine, Common Language Runtime. Эта часть программного обеспечения позволяет запускать независимый от платформы промежуточный язык (код IL, байтовый код) и выполнять машинные инструкции (компиляция точно в срок). Обычно такая VM отвечает за другие спутниковые задачи: управление ресурсами, очистка памяти, потоки, безопасность и т.д.

Нет никаких плюсов и минусов. Все трое выполняют разные задания, которые вряд ли можно сравнить.

Языки и платформы не имеют особого порядка, есть буквально сотни других образцов

Ответ 3

Реальные машины против виртуальных машин

  • Реальная машина - это тот, чей машинный код выполняется с помощью аппаратного обеспечения
  • Виртуальная машина - это та, чей "машинный код" выполняется интерпретатором.

Интерпретаторы против компиляторов

Ответ здесь