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

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

php
121 голос | спросил nicky 3 +04002009-10-03T23:56:01+04:00312009bEurope/MoscowSat, 03 Oct 2009 23:56:01 +0400 2009, 23:56:01

14 ответов


0

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

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

ответил Thibault Martin-Lagardette 3 +04002009-10-03T23:57:33+04:00312009bEurope/MoscowSat, 03 Oct 2009 23:57:33 +0400 2009, 23:57:33
0

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

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

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

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

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

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

ответил Barry Brown 4 +04002009-10-04T00:18:42+04:00312009bEurope/MoscowSun, 04 Oct 2009 00:18:42 +0400 2009, 00:18:42
0

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

ответил Max 4 +04002009-10-04T00:06:28+04:00312009bEurope/MoscowSun, 04 Oct 2009 00:06:28 +0400 2009, 00:06:28
0

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

ответил code_burgar 3 +04002009-10-03T23:58:03+04:00312009bEurope/MoscowSat, 03 Oct 2009 23:58:03 +0400 2009, 23:58:03
0

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

.

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

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

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

Спасибо :))

ответил Gaurang Deshpande 19 AM00000090000002631 2015, 09:09:26
0

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

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

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

ответил jrockway 4 +04002009-10-04T00:03:27+04:00312009bEurope/MoscowSun, 04 Oct 2009 00:03:27 +0400 2009, 00:03:27
0

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

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

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

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

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

  

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

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

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

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

ответил Claudiu Creanga 28 MonEurope/Moscow2015-12-28T00:11:58+03:00Europe/Moscow12bEurope/MoscowMon, 28 Dec 2015 00:11:58 +0300 2015, 00:11:58
0

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

Этот код ...

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

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

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

ответил Magnus Andersson 8 22011vEurope/Moscow11bEurope/MoscowTue, 08 Nov 2011 23:51:48 +0400 2011, 23:51:48
0

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

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

ответил Rahul Chauhan 24 PM00000040000005331 2017, 16:56:53
0

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

ответил Stanislav Palatnik 3 +04002009-10-03T23:58:29+04:00312009bEurope/MoscowSat, 03 Oct 2009 23:58:29 +0400 2009, 23:58:29
0

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

ответил suruz 7 +04002011-10-07T13:58:47+04:00312011bEurope/MoscowFri, 07 Oct 2011 13:58:47 +0400 2011, 13:58:47
0

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

ответил tz_sz 22 PM000000120000002631 2014, 12:13:26
0

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

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

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

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

ответил FluorescentGreen5 8 MaramWed, 08 Mar 2017 08:40:17 +03002017-03-08T08:40:17+03:0008 2017, 08:40:17
0

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

ответил bujashaka 18 +03002017-10-18T14:22:00+03:00312017bEurope/MoscowWed, 18 Oct 2017 14:22:00 +0300 2017, 14:22:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132