У меня есть абстрактный вопрос, особенно о PHP.
Поскольку у нас есть Apache / xampp / mamp и другие различные пакеты для запуска PHP на разных ОС, можем ли мы предположить, что PHP имеет своего рода виртуальную машину? (пиши один раз и бегай везде)
Итак, хотя этот вопрос не по теме, я добавлю:
Является ли PHP виртуальной машиной
Нет, но PHP это язык. В начале он был простым инструментарием, затем превратился в интерпретируемый язык и теперь является скомпилированным языком (своего рода). PHP-код скомпилирован на промежуточный язык, который работает на Zend Virtual Machine (Движок Zend является ядром среды выполнения PHP по умолчанию). Таким образом, PHP — это скомпилированный язык, который работает на виртуальной машине. И да, смысл этой виртуальной машины — гибкость и портативность X-платформы.
Как это работает?
Как и любой язык, ваш исходный код обрабатывается лексером, который переводит исходный код в токены
Эти токены затем анализируются парсером. Задача синтаксического анализатора — генерировать инструкции для виртуальной машины (коды OP, ByteCode, язык посредника … как бы вы это ни называли).
После того, как это сделано, коды OP исполняются виртуальной машиной Zend. Когда выполнение завершено, все ресурсы освобождаются, а сгенерированные OPCodes теряются. (Конечно, OP-коды кэшируются по пути, но это другое дело).
Этот последний бит — критическое различие между PHP и такими языками, как Java, которые имеют отдельный компилятор и предлагают виртуальную машину, которая запускает ByteCode сразу. В PHP есть расширения, плагины и совершенно отдельные среды выполнения (например, hhvm == Виртуальная машина HipHop), которые предлагают встроенную поддержку для предварительно скомпилированных программ для запуска.
Заметка
Есть люди, которые утверждают, что PHP не является компилируемым языком, так же как есть пуристы, которые утверждают, что это не язык программирования. Но дело не в этом. Кроме того, нет реального, четкого определения ни того, ни другого. Некоторые говорят, что Bash — это язык сценариев, другие отрицают это. Некоторые называют Python языком программирования, другие нет.
В зависимости от того, какой движок вы запускаете, JavaScript компилируется или интерпретируется. Большинство движков реализуют гибридную модель (части кода компилируются, части интерпретируются). Некоторые могут даже утверждать, что, поскольку он работает на виртуальной машине, Java не является реальный язык программирования. Какими бы ни были ваши взгляды по этому вопросу, это не имеет значения.
Обсуждение того, что что-то (язык программирования, язык сценариев, скомпилированный или интерпретированный), является полным буллом. Трата времени; лучше всего потратить время на написание какого-то актуального, полезного кода на любом языке, который вам нравится
Даже так: нравится вам это или нет, PHP работает на виртуальной машине. Конец чего-либо.
Других решений пока нет …