Статьи

PHP борется с HHVM и Zephir с помощью PHPNG

Эта статья была спонсирована NewRelic . Спасибо за поддержку спонсоров, которые делают возможным SitePoint!

В предыдущей версии этой статьи неправильно указывалось, что PHPNG — это JIT. Это не тот случай, и необходимые изменения были внесены. Смотрите нижнюю часть статьи для получения дополнительной информации.


Хаос в старом мире! Первый хип-хоп, много лет назад, и никто не грызет глаз. Затем внезапно происходит HHVM , вводится Hack , и все чертовски рвется — Facebook создал новый PHP и все сломал / исправил (в зависимости от того, кого вы спрашиваете). Более того, Zephir порождает и угрожает компиляцией всего вашего PHP-кода на C-уровне, с полной поддержкой текущих расширений PHP (хотя Zephir не предназначен для замены C или PHP, он позволяет писать код, близкий к PHP, и компилировать его в C , что позволяет вам легко переписать все ваши PHP-приложения в формат, который может быть закрыт и скомпилирован для скорости и безопасности). Это время роста грибов для альтернативных сред выполнения PHP, и также появляется HippyVM .

Среди моря перемен раздался еще один всплеск: PHPNG .

Как представил Мануэль Лемос , PHPNG — это новая ветвь PHP, пришедшая к еще не определенной будущей версии PHP.

Чего ждать?

Эта несколько бестолково названная (NG = новое поколение) и неуклюже представленная версия PHP является попыткой основной команды радикально оптимизировать PHP и позволить JIT-компиляторам в будущем продвинуть его еще дальше. PHPNG — это не JIT, а обновление, позволяющее впоследствии создать хороший JIT-компилятор. Ветвь PHPNG сама по себе не содержит никаких функций JIT .

PHPNG был представлен Дмитрием Стоговым во внутренней новостной ленте. Дмитрий отвечает за производительность и оптимизацию в Zend, и в основном занимается Zend Engine. Обновление NG сосредоточено на переписывании основных частей Zend Engine, чтобы обеспечить лучшее распределение памяти для типов данных PHP.

Как цитируется Reddit :

NG существует потому, что эксперименты, проведенные Zend по внедрению JIT, провалились в реальном мире из-за того, как в настоящее время проектируется двигатель, в основном потому, что мы все распределяем все время. Патч NG изменяет норму, поэтому по умолчанию мы больше не выделяем zvals, это повышает производительность и позволяет использовать намного более аккуратные API.

Как и в случае с любой попыткой «сделать PHP лучше», в этом есть свои плюсы и минусы.

Pros

Скорость!

Более быстрое выполнение означает более быстрое распределение ресурсов, означает более быструю обработку запросов, означает большую пропускную способность запросов. Первые результаты являются многообещающими ( 1 , 2 ).

Производительность по-прежнему нужно сравнивать с другими альтернативными решениями, но 10-30% — это не то, что надо.

Расширения!

Поскольку это обновление выполняется на официальном Zend Engine, а не на альтернативной среде выполнения, оно в значительной степени гарантирует совместимость с текущими расширениями. Одной из главных причин, по которой люди колеблются в связи с переходом на HHVM, является отсутствие необходимых расширений, к которым они привыкли (Phalcon, в моем случае). Лично, более быстрый движок для PHP, который поддерживает Phalcon, заставил бы меня значительно меньше заботиться об обновлениях, которые предлагает Hack сегодня.

Так что это гарантирует совместимость расширений … подождите. Является ли? Ооо

Cons

Расширения!

Слишком хорошо, чтобы быть правдой.

Не все расширения поддерживаются, некоторые
тесты не пройдены, и у нас также есть больше идей для дополнительного улучшения.

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

Несмотря на то, что я довольно открыто высказываюсь против провайдеров виртуального хостинга, я полностью понимаю проблему, которая может возникнуть У нас был похожий беспорядок, когда мы пытались заставить провайдеров «переходить на PHP5», и совсем недавно, когда им нужно было поговорить о более современных версиях PHP, чтобы заставить их сделать большой сдвиг, который потенциально может представить Перерывы в БК будут непростой задачей.

Этот страх изменений будет цементировать использование старых версий PHP, что, в свою очередь, приведет к появлению более ужасно неквалифицированных разработчиков PHP, работающих над устаревшим кодом, совершенно не обращая внимания на лучшие практики и уязвимости. Короче говоря, мы должны повторить историю. Как это уже указывалось, это может звучать как конец света, но, будучи глубоко вовлеченным во все круги PHP и ежедневно подвергаясь воздействию низкокачественных через полный почтовый ящик, я вижу, где мы сейчас находимся и куда идем , Однако не все так просто — такие решения, как Heroku и DigitalOcean, позволят людям запускать самые последние версии и пользовательские версии PHP, доступные по ценам ниже (или ниже), чем у провайдеров виртуального хостинга.

Я искренне надеюсь, что основной команде удастся довести новый Zend Engine до такой степени, что он сохранит обратную совместимость со ВСЕМИ расширениями, но при этом будет предупреждать о компиляции всех разработчиков расширений, которые не соблюдают правила и рекомендации NG. ,

Внутренняя медлительность

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

Является ли это тем, что основная команда разработчиков просто не видит, как говорят посты Энтони и Фила, или потому, что она слишком мала и недостаточно финансируется, чтобы быстро вносить какие-либо серьезные изменения, не имеет значения — внутренняя медлительность означает, что мы никогда не увидим NG в открытый и вне «альфа» статус, как и в случае с мифическим PHP6.

Это подводит нас к последнему пункту.

Опоздал на вечеринку … Опять

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

Подсказки типов, доступные сегодня как в Hack, так и в Zephir, укоренятся в этих реализациях. Многопоточность, компиляция, автономный веб-сервер — все функции, доступные сегодня в альтернативных решениях, и все они практически готовы к работе. В то время как основная группа разработчиков работает над некоторыми из них , и PHP, вероятно, будет иметь поддержку IIS до HHVM (что, по-видимому, важно для некоторых людей), я лично все еще считаю, что это не достаточно быстрый прогресс с официальной стороны PHP.

Даже если основная группа решит проголосовать «да» за все эти экзотические функции, для которых существуют проблемы и требования, их реализация займет слишком много времени — и они по умолчанию опаздывают на вечеринку, если только не парадигма сдвиг введен и весь их способ работы перевернут. Перенос источника на GitHub был хорошим ходом, но он только поцарапал поверхность.

Тем не менее, сам Расмус предположительно сказал, что HHVM, ставший ядром PHP через несколько лет, не так уж и важен для сценария Sci-Fi.

Вывод

За исключением права собственности на Facebook (которое само по себе несет в себе множество негативных коннотаций), HHVM подтолкнул разработчиков в правильном направлении, показав, как можно выполнять такие обновления. Это стимулирует инновации и заставляет тех, кто слишком долго сидел на троне, встать, размять ноги и посмотреть, смогут ли они еще бежать. Агрессивный подход Facebook заставил мир PHP сделать двойной взгляд и задуматься о том, что происходит, и довольно скоро это завоевало популярность.

Конкуренция потрясающая. Куда бы это ни привело нас дальше, я настроен оптимистично.

Обновление статьи 28 мая 2014

После обмена электронной почтой с Филом Стердженом и после прочтения официального заявления я отредактировал части вышеприведенного текста. Короче говоря, я классифицировал PHPNG как JIT, когда это явно не то, а простое обновление производительности, которое позволит основной группе позже разработать надлежащий JIT-компилятор.