Подтвердить что ты не робот

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

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

4b9b3361

Ответ 2

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Вы должны на самом деле задать вопрос, который вы хотите задать вместо этого. ("Оплачиваю ли я штраф за производительность, поскольку PHP перекомпилирует мой исходный код для каждого запроса?" И т.д.)

Ответ 6

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

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

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

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

Ответ 7

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

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

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

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

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

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

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

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

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

Ответ 8

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

Ответ 9

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

Этот код...

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

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

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

Ответ 10

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

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

Ответ 11

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

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

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

Источник: fooobar.com/questions/54382/...

Ответ 12

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

Ответ 13

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

Ответ 14

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

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

Движок Zend работает как переводчик.

Для получения дополнительной информации о новых технологиях и игровом мире вы можете посетить

https://www.terasoltechnologies.com/blog/

Ответ 15

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

Ответ 16

PHP является интерпретируемым языком, потому что вы не компилируете его один раз, а затем запускаете его много раз. Каждый раз, когда он запускается, он интерпретируется. Не существует файла "class", "dll" или "so", как в C/С#/every-other-other-compiled-language. Он интерпретируется из источника (файл *.php) при каждом запуске. PHP - это интерпретируемый язык.

Ответ 17

PHP интерпретируется. Вы не компилируете это; Вы сохраняете его в файл, а сервер читает его построчно.

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