2010-08-01 4 views
11

Есть ли у PHP виртуальная машина, например Java?Имеет ли PHP виртуальную машину, такую ​​как Java?

+3

Есть ли у PHP виртуальная машина? Конечно, это возможно. Как JVM? Даже не близко. –

+0

Теперь есть виртуальная машина, очень похожая на JVM. Смотрите: https://github.com/Facebook/hiphop-php/wiki –

ответ

14

Да.

Независимо от платформы PHP работает, скрипты скомпилированы в один и тот же байт-код и запускаются Zend Engine.

Отличие от Java заключается в том, что этот скомпилированный код обычно не хранится в отдельных файлах, и скрипты перекомпилируются при каждом выполнении (однако, см. Кэши операций операций).

+1

Являются ли их концептуальные различия между Zend Engine и JVM? –

+1

@Chris Этот вопрос очень расплывчатый, и мне не хватает реализаций JVM, чтобы даже набросать ответ. – Artefacto

+0

Это справедливо. Спасибо. –

5

Еще одно важное различие между Zend Engine и типичной виртуальной машины Java в том, как они выполнить байткоды:

  • Движок Zend выполняет (интерпретирует) скомпилированные байткоды непосредственно. (По крайней мере, это то, что, я думаю, происходит. Я не смог подтвердить это из онлайн-документации Zend!)
  • JVM обычно использует компилятор JIT для компиляции байт-кодов в собственные инструкции и выполнения собственных инструкций.

На самом деле поведение JVM более сложное, чем это. JVM не всегда компилируются в собственный код, и когда они это делают, они обычно задерживают компиляцию JIT, пока не считают, что это стоит того. До этого они запускают байткоды напрямую.

+2

Глядя на исходный код для Zend, он показывает, что он действительно интерпретирует байт-код напрямую, а не преобразует его в native. И код тоже не очень ... – siride

+1

У меня было много «каких звуков», когда вы переходите через исходный код php, но, честно говоря, элементы vm zend-движка не входят в число этих. По сравнению с другими языками ... ну, большинство из них вот так. – VolkerK

0

Да, но совсем недавно это похоже на JVM для Java. Он был изобретен facebook и анонсирован на конференции OSCON на другой неделе (июль 2013 г.).

Информационный отчет о новой РНР VM можно прочитать here, а код и дополнительную информацию можно найти на github.

Смежные вопросы