PHP компилируется или интерпретируется?
PHP компилируется или интерпретируется?
16 ответов
Язык PHP интерпретируется. Двоичный файл, который позволяет интерпретировать PHP, компилируется, но то, что вы пишете, интерпретируется.
Вы можете увидеть больше на странице Википедии для интерпретируемых языков
И то и другое. PHP компилируется в промежуточный байт-код, который затем интерпретируется механизмом выполнения.
Работа PHP-компилятора состоит в том, чтобы анализировать ваш PHP-код и преобразовывать его в форму, подходящую для механизма исполнения. Среди его задач:
- Игнорировать комментарии
- Разрешить переменные, имена функций и т. Д. И создать таблицу символов
- Создайте абстрактное синтаксическое дерево вашей программы
- Напишите байт-код
В зависимости от настроек PHP этот шаг обычно выполняется один раз, при первом вызове скрипта. Вывод компилятора кэшируется для ускорения доступа при последующем использовании. Однако, если скрипт изменяется, этап компиляции выполняется снова.
Двигатель времени выполнения обходит AST и байт-код при вызове скрипта. Таблица символов используется для хранения значений переменных и предоставления адресов байт-кода для функций.
Этот процесс компиляции в байт-код и интерпретации во время выполнения типичен для языков, которые работают на виртуальной машине определенного типа, включая Perl, Java, Ruby, Smalltalk и другие.
Скомпилированный код может быть выполнен непосредственно процессором компьютера. То есть исполняемый код указывается на родном языке процессора
Код интерпретируемых языков должен быть переведен во время выполнения из любого формата в машинные инструкции процессора. Этот перевод сделан переводчиком.
Было бы неправильно говорить, что язык интерпретируется или компилируется, потому что интерпретация и компиляция являются одновременно свойствами реализации этого конкретного языка, а не свойством самого языка. Таким образом, любой язык может быть скомпилирован или интерпретирован - это просто зависит от того, что делает конкретная реализация, которую вы используете.
Наиболее широко используемая реализация PHP основана на Zend Engine и известна просто как PHP. Zend Engine компилирует исходный код PHP в формат, который он может выполнить, таким образом, механизм Zend работает как интерпретатор.
Спасибо:)
В целом это интерпретируется, но некоторое время может использовать его как скомпилированный, и это действительно увеличивает производительность. Инструмент с открытым исходным кодом для выполнения этой операции: hhvm.com
PHP - это интерпретируемый язык. Однако он может быть скомпилирован в байт-код сторонними инструментами.
Я знаю, что этот вопрос старый, но он связан повсеместно, и я думаю, что все ответы здесь неверны (возможно, потому что они старые).
НЕТ такой вещи, как интерпретируемый язык или скомпилированный язык. Любой язык программирования может быть интерпретирован и / или скомпилирован.
Прежде всего, язык - это просто набор правил, поэтому, когда мы говорим о компиляции, мы ссылаемся на конкретные реализации этого языка.
HHVM, например, является реализацией PHP. Он использует JIT-компиляцию для преобразования кода в промежуточный байт-код HipHop, а затем преобразуется в машинный код. Достаточно ли сказать, что оно составлено? Некоторые реализации Java (не все) также используют JIT. Google V8 также использует JIT.
Использование старых определений скомпилированных и интерпретированных в настоящее время не имеет смысла.
"Скомпилирован ли PHP?" это бессмысленный вопрос, учитывая, что больше нет четких и согласованных разделителей между тем, что является компилируемым языком и интерпретируемым языком.
Один из возможных способов разграничить их (я не нахожу никакого смысла в этой дихотомии):
скомпилированные языки используют компиляцию Ahead of Time (C, C++);
в интерпретируемых языках используется компиляция Just in Time или вообще без компиляции (Python, Ruby, PHP, Java).
Это бессмысленный вопрос. PHP использует yacc (бизон), как и GCC. yacc это "компилятор компилятора". Вывод yacc - это компилятор. Вывод компилятора "скомпилирован". PHP анализируется выводом yacc. Так что это, по определению, компилируется.
Если это не удовлетворяет, рассмотрите следующее. И php (двоичный файл), и gcc читают ваш исходный код и создают абстрактное синтаксическое дерево. В версиях 4 и 5 php затем обходит дерево, чтобы перевести программу в байт-код (этап компиляции). Вы можете увидеть байт-код, переведенный в коды операций (которые аналогичны сборке), используя Vulcan Logic Dumper. Наконец, php (в частности, движок Zend) интерпретирует байт-код. gcc, для сравнения, обходит дерево и выводит сборку; он также может запускать ассемблеры и компоновщики для завершения процесса. Вызывать программу, обрабатываемую одним "интерпретированным", а другую программу, обрабатываемую другим "скомпилированным", бессмысленно. В конце концов, обе программы запускаются через "компилятор".
Вы должны на самом деле задать вопрос, который вы хотите задать вместо этого. ("Оплачиваю ли я штраф за производительность, поскольку PHP перекомпилирует мой исходный код для каждого запроса?" И т. Д.)
По крайней мере, он не компилирует (или, я бы сказал, оптимизировать) код так, как хотелось бы.
Этот код...
for($i=0;$i<100000000;$i++);
echo $i;
... одинаково сильно задерживает программу при каждом запуске.
Он мог обнаружить, что это расчет, который нужно сделать только в первый раз.
Просто имейте в виду, если вам каждый раз требуется исходный код для запуска программы, это означает, что она использует Интерпретатор. Так что это интерпретируемый язык.
С другой стороны, если вы скомпилировали исходный код и сгенерировали скомпилированный код, который вы можете выполнить, то он использует компилятор. Поскольку здесь вам не нужен исходный код. Как C, JAVA
PHP является интерпретируемым языком, но программа, используемая для интерпретации PHP, соблюдается.
PHP-компилятор генерирует байт-код, который является независимым от машины, позже этот байт-код преобразуется в машинно-понятный код с помощью механизма времени выполнения.
Принятый ответ заведомо ложный. PHP скомпилирован. Конец истории. Возможно, не к собственным инструкциям, а к интерпретируемому байт-коду.
Он интерпретируется как PHP-код интерпретируется движком (обычно сначала преобразуется в байт-код); он также скомпилирован, так как некоторые инструменты могут компилировать код PHP в исполняемый файл, например phc.
Традиционная категоризация компиляторов и интерпретаторов расплывчата в случае своевременной компиляции и интерпретации байт-кода. Интерпретируется PHP. Но это не означает, что PHP не скомпилирован. Компилятор PHP выполняет проверку синтаксиса, генерацию промежуточного кода и оптимизацию. интерпретируется, потому что объектный код, который генерирует PHP-компилятор, анализируется другим предварительно скомпилированным собственным двоичным файлом. Он интерпретирует промежуточный код в читаемую процессором инструкцию. Вот почему никакой другой язык не может быть таким же первым, как язык ассемблера, с точки зрения выполнения инструкции. Потому что инструкции ассемблеру (сборка компилятора) производить уже есть в процессоре.
Очевидно php.exe
(интерпретатор PHP) - это скомпилированный исполняемый файл.
Тем не менее, я не думаю, что это то, что вы спросили.
Когда скрипт PHP загружается, он компилируется в двоичный формат, известный как коды операций Zend, в память, которая затем эффективно интерпретируется.
Источник: /questions/311670/kak-imenno-vyipolnyaetsya-skript-php/311694#311694
Его интерпретируют. Так что имейте это в виду, когда вы помещаете слишком много комментариев в свой код...
PHP интерпретатор, вы не компилируете его, вы сохраняете его в файл, а сервер читает его построчно. С ++ компилируется, вы компилируете весь скрипт и затем запускаете exe, вашу программу. Слишком поздно вносить изменения сейчас.