Есть ли у PHP виртуальная машина, например Java?
Есть ли у PHP виртуальная машина, например Java?
Ответы
Ответ 1
Да.
Независимо от платформы, на которой работает PHP, скрипты скомпилированы в один и тот же байт-код и запускаются Zend Engine.
Отличие от Java заключается в том, что этот скомпилированный код обычно не хранится в отдельных файлах, и скрипты перекомпилируются при каждом выполнении (однако, см. кеши опкода).
Ответ 2
Еще одно важное различие между Zend Engine и типичной JVM заключается в том, как они запускают байт-коды:
- Zend Engine выполняет (интерпретирует) скомпилированные байт-коды напрямую. (По крайней мере, это то, что я думаю. Я не смог подтвердить это из онлайн-документации Zend!)
- JVM обычно использует компилятор JIT для компиляции байт-кодов в собственные инструкции, а затем выполняет собственные инструкции.
Собственно, поведение JVM более сложное, чем это. JVM не всегда компилируются в собственный код, и когда они это делают, они обычно задерживают компиляцию JIT, пока не считают, что это стоит того. До этого они непосредственно запускают байткоды.
Ответ 3
Да, но совсем недавно это похоже на JVM для Java. Он был изобретен facebook и анонсирован на конференции OSCON на другой неделе (июль 2013 г.).
Информационный отчет о новой PHP VM можно прочитать здесь, а код и дополнительную информацию можно найти на github.