Есть ли у 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.