Скомпилирован или интерпретирован PHP?

Скомпилирован или интерпретирован PHP?

Язык PHP интерпретируется. Бинарный файл, который позволяет интерпретировать PHP, скомпилирован, но то, что вы пишете, интерпретируется.

Вы можете увидеть больше на странице википедии для интерпретируемых языков

И то и другое. PHP скомпилирован до промежуточного байт-кода, который затем интерпретируется механизмом времени выполнения.

Задача компилятора PHP состоит в том, чтобы проанализировать ваш PHP-код и преобразовать его в форму, подходящую для механизма выполнения. Среди его задач:

  • Игнорировать комментарии
  • Разрешить переменные, имена функций и т. Д. И создать таблицу символов
  • Построить абстрактное синтаксическое дерево вашей программы
  • Напишите байт-код

В зависимости от вашей настройки PHP этот шаг обычно выполняется один раз, при первом вызове сценария. Выход компилятора кэшируется для ускорения доступа при последующем использовании. Однако, если скрипт изменен, шаг компиляции выполняется снова.

Механизм выполнения запускает AST и байт-код при вызове сценария. Таблица символов используется для хранения значений переменных и предоставления адресов байт-кода для функций.

Этот процесс компиляции для байт-кода и интерпретации его во время выполнения типичен для языков, которые запускаются на какой-то виртуальной машине времени исполнения, включая Perl, Java, Ruby, Smalltalk и другие.

В целом это интерпретируется, но некоторое время может использовать его как скомпилированное, и оно действительно увеличивает производительность. Инструмент с открытым исходным кодом для выполнения этой операции: http://www.phpcompiler.org/

PHP – интерпретируемый язык. Однако он может быть скомпилирован в байт-код сторонними инструментами.

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

Это бессмысленный вопрос. PHP использует yacc (bison), как GCC. yacc – это компилятор компилятора. Вывод yacc является компилятором. Вывод компилятора компилируется. PHP анализируется выходом yacc. Так что это, по определению, скомпилировано.

Если это не удовлетворяет, рассмотрим следующее. Оба php (двоичный) и gcc читают ваш исходный код и создают абстрактное синтаксическое дерево. В версиях 4 и 5 php затем просматривает дерево, чтобы перевести программу в байт-код (шаг компиляции). Вы можете видеть, что байт-код переведен на коды операций (которые аналогичны сборке) с помощью Vulcan Logic Dumper . Наконец, php (в частности, движок Zend) интерпретирует байт-код. gcc, в сравнении, идет по дереву и выводит сборку; он также может запускать сборщики и компоновщики для завершения процесса. Вызов программы, обрабатываемой одним «интерпретированным», а другая программа, обрабатываемая другим «скомпилированным», не имеет смысла. В конце концов, программы оба запускаются через «компилятор» с обоими.

На самом деле вы должны задать вопрос, который хотите задать. («Я плачу штраф за производительность, поскольку PHP перекомпилирует мой исходный код для каждого запроса?» И т. Д.)

Скомпилированный код может быть выполнен непосредственно процессором компьютера. То есть исполняемый код указан на родном языке процессора

Код интерпретируемых языков должен быть переведен во время выполнения из любого формата в инструкции процессора. Этот перевод выполняется переводчиком.

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

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

Спасибо 🙂

Я знаю, что этот вопрос старый, но он связан повсюду, и я думаю, что все ответы здесь неверны (возможно, потому что они старые).

Нет такой вещи, как интерпретируемый язык или скомпилированный язык. Любой язык программирования может быть интерпретирован и / или скомпилирован.

Прежде всего, язык – это всего лишь набор правил, поэтому, когда мы говорим о компиляции, мы ссылаемся на конкретные реализации этого языка.

Например, HHVM представляет собой реализацию PHP. Он использует компиляцию JIT для преобразования кода в промежуточный байт-код HipHop, а затем переводится в машинный код. Достаточно ли сказать, что он скомпилирован? Некоторые реализации Java (не все) также используют JIT. Google V8 также использует JIT.

Использование старых определений скомпилированного и интерпретированного в настоящее время не имеет смысла.

«Скомпилирован PHP?» является нечувствительным вопросом, учитывая, что уже нет четких и согласованных разделителей между тем, что является скомпилированным языком и интерпретированным.

Один из возможных способов их разграничения (я не нахожу никакого смысла в этой дихотомии):

скомпилированные языки используют компиляцию Ahead of Time (C, C ++);

интерпретируемые языки используют компиляцию Just in Time или вообще не компилируют (Python, Ruby, PHP, Java).

По крайней мере, он не компилирует (или должен сказать оптимизировать) код столько, сколько ему этого захочется.

Этот код …

 for($i=0;$i<100000000;$i++); echo $i; 

… задерживает программу одинаково при каждом запуске.

Он мог обнаружить, что это расчет, который нужно выполнить только в первый раз.

Традиционная классификация компиляторов и интерпретаторов размыта в случае компиляции точно и вовремя и интерпретации байт-кода. PHP интерпретируется. Но это не значит, что PHP не компилируется. Компилятор PHP выполняет проверку синтаксиса, промежуточную генерацию кода и оптимизацию. PHP интерпретируется потому, что объектный код, который генерирует компилятор PHP, анализируется другим предварительно скомпилированным родным двоичным кодом. Он интерпретирует промежуточный код для читаемой инструкции cpu. Почему ни один другой язык не может быть первым, как язык ассемблера в процессе выполнения команды. Поскольку инструкции ассемблера ( сборщик), уже есть в процессоре.

Он интерпретируется как PHP-код интерпретируется движком (обычно сначала преобразуется в байт-код); он также скомпилирован, поскольку некоторые инструменты могут скомпилировать PHP-код в исполняемый файл, например phc.

Очевидно, php.exe (интерпретатор PHP) является скомпилированным исполняемым файлом.

Однако я не думаю, что это то, о чем вы просили.

Когда PHP-скрипт загружается, он получается скомпилированным в двоичный формат, известный как Zend opcodes, в память, которые затем интерпретируются эффективно.

Источник: https://stackoverflow.com/a/18595821/3881189

PHP является интерпретированным языком, но программа, используемая для интерпретации PHP, выполняется.

Компилятор PHP генерирует байт-код, который является независимым от машины позже, этот байт-код преобразуется в машинный понятный код с помощью механизма времени выполнения .

php – интерпретатор, вы его не компилируете, вы сохраняете его в файле, а сервер читает его по строкам. C ++ скомпилирован, вы скомпилируете весь скрипт и затем запустите exe, свою программу. Слишком поздно вносить изменения.

Его интерпретируется. Поэтому имейте это в виду, когда вы добавляете слишком много комментариев в свой код …