С ростом популярности JavaScript мне было интересно услышать (даже во время той же речи ) либо о движке JavaScript, либо о виртуальной машине JavaScript, либо о интерпретаторе JavaScript в том же контексте и ссылаясь на одно и то же.
Поэтому я попытался провести небольшое исследование, почему все эти модные словечки сосуществуют одновременно (должна быть причина) и есть ли между ними какие-то реальные (хотя и небольшие) различия.
Я пытаюсь обобщить то, что я узнал до сих пор, из множества разных источников (которые я цитирую в следующих строках). Не стесняйтесь поправлять меня, если я в чем-то ошибаюсь / ввожу в заблуждение.
Хотя я обнаружил, что их обязанности во время выполнения в основном одинаковы, я обнаружил также некоторые основные отличия:
Виртуальные машины процессов
- are the most complex (implements even the IO, virtual instruction set etc.)
- всегда включает интерпретатор + промежуточный язык
- кроме может также включать компиляцию (своевременную и / или динамическую перекомпиляцию)
- приложения запускаются только внутри процесса ВМ как поток
- в сочетании со средой выполнения
- примеры: виртуальная машина Java, виртуальная машина Dalvik
Время выполнения
- does not abstract away from native code
- использует исключительно методы компиляции (либо точно в срок или заблаговременно a >)
- отсутствует процесс виртуальной машины / изолированные приложения
- тесно связанные / зависимости от базовой операционной системы
- примеры: Common Language Runtime, Android Runtime
Языковые движки
- more lightweight
- может использовать либо интерпретатор, либо компиляция ( точно в срок и / или динамическая перекомпиляция)
- отделен от базовой среды / операционной системы
- Примеры: все движки JavaScript, Zend Engine
Вопросы:
является ли верхний список точным, или это просто побочный продукт, основанный на полностью случайном сходстве между наиболее распространенными системами времени выполнения, которые используют одно и то же обозначение?
есть ли еще другие примечательные отличия?