Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
 почти независимых блоков — транслято- 

ра и интерпретатора. Зачем же понадобилось так делать? Конечно, из соображений 
быстродействия. Посудите сами: синтаксический разбор осуществляется всего один 
раз на этапе трансляции, а исполняется уже "полуфабрикат" — байт-код, который 
гораздо более удобен для этих целей. 
Пусть, например, в программе есть цикл с большим числом итераций. PHP версии 3, 

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

таксиса и т. д. В то же время PHP версии 4 делает это только один раз (при 
трансля- 
ции кода программы), и на каждой итерации цикла занимается лишь исполнением 
готового байт-кода. Выигрыш очевиден, не правда ли? 
Язык Perl, который практически всегда называют компилятором, работает точ- 
но по такой же схеме — он транслирует текст программы во внутреннее пред- 
ставление, а затем использует результирующий код при исполнении. Так что, 

Глава 6. Характеристика языка PHP 107 
можно сказать, PHP версии 4 представляет собой компилятор ровно настоль- 
ко, насколько им является Perl. 
Впрочем, описанная только что схема работы PHP не совсем соответствует действи- 

тельности. Дело в том, что в языке можно создавать конструкции, которые просто 
физически невозможно перевести во внутреннее представление во время фазы транс- 

ляции (к таковым, например, относится инструкция включения в программу кода 
внешнего файла, имя которого выясняется только на этапе исполнения программы — 
к примеру, вводится пользователем). В этом случае PHP просто пропускает их, 
"от- 
кладывая на потом", и транслирует, как только до них дойдет управление. Конечно,
 
это несколько замедляет выполнение программы, но если подобных конструкций в 
ней немного (и они не вставлены в цикл с большим количеством итераций), 
замедле- 
ние не так уж и существенно. 
Как вы видите, PHP версии 4 коренным образом отличается от своего предшествен- 
ника — PHP версии 3. Фактически, весь код программы в очередной раз был перепи- 

сан заново. При этом возникла серьезная проблема с переносимостью программ: не 
так-то легко обеспечить совместимость классического интерпретатора с новым 
транс- 
лирующим блоком (вообще, трансляторы по своей природе ограничивают свободу 
действий, зато привносят быстродействие). Тем не менее, разработчики PHP 
блестя- 
ще справились с проблемой: практически любая программа, работающая на PHP вер- 
сии 3 и не использующая недокументированных возможностей языка, будет работать 
и на четвертой версии. 
Что же такое PHP? Как мы выяснили, уж точно не компилятор, т. к. не имеет ни 
ма- 
лейшего отношения к машинному коду. И, конечно же, не транслятор в чистом ви- 
де — ведь оттранслированный байт-код нельзя ни сохранить в файле, ни использо- 
вать повторно. В то же время, главной фазой работы PHP является интерпретация 
внутреннего представления программы и ее исполнение. Именно эта фаза и занимает 

больше всего времени в серьезных сценариях. Итак, мы вынуждены заключить, что 
PHP является интерпретатором с встроенным блоком трансляции, оптимизирующим 
ход интерпретации. 
Я уже предвижу, что множество читателей не согласятся с такой формулиров- 
кой. Конечно, слово "компилятор" звучит солиднее, чем какой-то там "интер- 
претирующий транслятор". Но все дело в том, что английское слово compiler 
переводится не только как "компилятор", но также и как "транслятор". Заду- 
майтесь над этим, если окончательно решили для себя считать PHP и Perl 
компиляторами. 

Часть III. Основы языка PHP 108 
Достоинства и недостатки 
интерпретатора 
 
<<-[Весь Текст]
Страница: из 287
 <<-