PHP компилируется или интерпретируется?



PHP компилируется или интерпретируется?

832   14  
PHP

14 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

спасибо :)

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

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

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

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

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

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

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

используя старые определения компилируется и интерпретируется не имеет сейчас смысла.

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

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

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

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

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

этот код...

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

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

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

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

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

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

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

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

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

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

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

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

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

Comments

    Ничего не найдено.