Материал в этой статье устарел. По сути, здесь изложены догадки о PHP 7, когда ещё не были доступны альфы. На текущий момент доступна уже вторая бета (а очень скоро появится и стабильный релиз). Теперь уже совершенно определённо можно сказать о нововведениях в PHP 7:
- Увеличение производительности PHP 7 до двух раз по сравнению с PHP 5.6
- Ожидаемая поддержка 64-бит
- Многие фатальные ошибки теперь Exceptions (исключения)
- Удаление старых и не поддерживаемых SAPI (программных интерфейсов серверных приложений) и расширений
- Оператор NULL коалесцирующий (??)
- Комбинированный оператор сравнения (<=>)
- Декларация возвращаемого типа
- Декларация скалярного типа
- Анонимные классы
Эта верхушка айсберга изменений, подробности о переходе с предыдущих версий PHP на PHP7 можно почитать тут.
Более того, уже сейчас можно попробовать PHP 7 и на Linux и на Windows:
- Как установить PHP 7 и как обновить до PHP 7 на Windows
- Как установить PHP 7 (PHP-FPM и FastCGI) для ISPConfig 3 на Debian 8 (Jessie)
И даже уже есть готовая сборка сервера с PHP 7: «MiAl’s Server Pack (полностью настроенный и рабочий сервер Apache + MySQL + PHP + phpMyAdmin).
Тем не менее, я не отговариваю вас от чтения данной статьи. Вполне возможно, то, что изложено здесь, всё-таки будет реализовано в PHP 8.
Главные особенности PHP 7
Полный набор нововведений PHP 7 до сих пор ещё не определён. Но о некоторых мы можем уже говорить, т. к. они уже стали реализованными. О других мы можем только предполагать, основываясь на косвенных признаках.
Кстати, ещё до выхода PHP 7 весьма вероятно выйдет PHP 5.7.
1. Огромное улучшение производительности
Главной целью PHPNG было привнесение улучшений производительности, чтобы, по крайней мере, соответствовать тому, что обеспечивает HHVM от Facebook.
Зью Сураски (Zeev Suraski) из Zend написал статью в которой он открыто признаёт, что они приняли HHVM как конкурента Zend Engine (основан на PHP). Это просто подтверждает, что выпуск HHVM, а затем и Facebook Hack стали причиной огромного интереса Zend к продолжению сохранения лидирующего воплощения PHP.
В этой статье он также демонстрирует как далеко ветка PHPNG эволюционировала в плане улучшения производительности.
2. Движок JIT
Согласно Дмитрию Стогову (Dmitry Stogov) из Zend, разработка PHPNG была начата с мотивации исследовать внедрение движка JIT для Zend Engine, основанного на PHP
Движок JIT может динамически компилировать коды операции (опкоды) в родной машинный код, что в конце-концов сделает код работающим быстрее в следующий раз, когда он будет исполняться.
Хотя внедрение движка JIT ещё не осуществлено в ветку PHPNG, Дмитрий упоминает в мае, что он «потратил значительное количество времени на эксперименты со JIT, и даже создал PoC (Proof of concept — прототип) LLVM, базирующийся на JIT компиляторе встроенном в OPCache».
Следовательно, это определённо в планах Zend разрешить приведение движка JIT в PHP 7, так согласно Зью Сураски (Zeev Suraski) «это может пробить уже достигнутый потолок производительности для и без того сверх быстрой реализации».
3. AST: Abstract Syntax Tree (Дерево абстрактного Синтаксиса)
Недавно Никита Попов (Nikita Popov) предложил внедрение создания Дерева абстрактного синтаксиса как промежуточный шаг для процесса компиляции PHP.
Это не первый раз, когда Никита предположил внедрение компиляционного шага AST. Он уже предлагал это в 2012 году.
AST будет обеспечивать несколько преимуществ, которые он описывает в его предложениях, включая потенциал для дальнейшей оптимизации, что сделает работу PHP ещё быстрее.
В последнем предложении он описывает возможности открытия AST в расширениях PHP и приложениях пользовательского уровня. Это может открыть возможности для более интересных инструментов, вроде статических анализаторов кода, которые очень часто полезны для выявления ошибок или помогают найти дополнительный потенциал для оптимизации вашего PHP кода.
Никита уже предложил патч для внедрения поддержки AST в ветку PHPNG
4. Асинхронное программирование
Это очевидно не для всех, но недавно Джулиен Поли (Julien Pauli), один из сопровождающих последние релизы PHP, комментировал о реорганизации слоёв мультиплексирования PHP I/O (ввода-вывода).
Это, кажется, является необходимым шагом для реализации цикла события. Цикл события — это часть кода, которая заботиться о перехвате событий связанных с операциями I/O (ввода-вывода) и другими асинхронными задачами, которые могут быть запущены параллельно, как доступ к файлам, сети, базам данных, таймерам и т.д.
Простыми словами, это позволит будущим версиям PHP просто внедрить поддержку выполнения параллельных задач внутри одного запроса, таким образом, сделает прорыв в потенциале улучшения производительности PHP на полностью новый уровень.
Конечно, вы не получите автоматического прироста производительности простым включением поддержки асинхронного программирования. Новый PHP код должен быть написан так, чтобы использовать преимущества потенциала асинхронного программирования.
Не смотря на первоначальные усилия Джина Поля, это не означает, что поддержка встроенного асинхронного программирования будет задействована в PHP 7.
Тем не менее, поскольку Facebook Hack уже обеспечивает поддержку асинхронного программирования очень элегантным образом, я не удивлюсь, если разработчики ядра PHP начнут двигаться быстрее в стороны создания асинхронного программирования в PHP, и оно станет доступным рано или поздно.
5. Автономный многопоточный веб-сервер
Это то, что, кажется, не входит в планы по PHP 7, но это то, что может сделать PHP более масштабируемым.
PHP уже может быть запущен в рабочем режиме на мультипоточных веб-серверах вроде ngynx, lighttpd или даже Apache, тем не менее, это не то же самое, что иметь запущенный PHP на своём собственном мультипоточном веб-сервере.
Мультипоточный веб-сервер может обрабатывать много одновременных запросов, используя единый пул памяти, следовательно, избегается напрасная трата памяти, которая происходит когда PHP запущен как FastCGI или в режиме Apache pre-fork.
Он также позволил бы PHP использовать единый пул соединений к базе данных, минимизируя число одновременных открытых соединений к базе данных во время пика доступа.
HHVM уже может быть запущен как автономный многопоточный веб-сервер с тех дней, когда проект стал называться HipHop PHP compiler.
Это позволяет Facebook несколько уменьшить количество необходимых серверных машин для работы с высокой нагрузкой доступа, которую они имеют.
К сожалению запуск PHP как автономного мультипотокового веб-сервера ещё не входит в планы по PHP 7, несомненно здорово будет иметь эту вещь, по крайней мере, в PHP 8.
Когда будет день релиза PHP 7?
Сейчас слишком рано, чтобы делать реальные предположения о дате выхода PHP 7. Разные люди предполагают, что это будет между 1 и 3 годами. Обосновано предположение ждать финальный релиз PHP 7 где-то в 2016, хотя это не невозможно увидеть ранние альфа версии ещё в 2015.
Т.е. самое раннее через год можно будет попробовать PHP 7.
Заключение
Последние изменения в языке PHP стали, конечно, волнующими.
Если честно признаться, то большинство из этих нововведений стали следствием движения Facebook в сторону HHVM и языка программирования Hack. Я думаю, все мы должны поблагодарить Facebook за такой толчок.
Я подозреваю, что они сделали это нарочно, я имею ввиду продвинули HHVM и Hack, чтобы ключевые разработчики PHP проснулись и двигались быстрее. Если это так, то это сработало! Тем не менее, это принесло пользу для всего PHP сообщества в целом, следовательно, не должно быть недовольных.
Что вы думаете? Вам нравятся эти последние развития в языке PHP? Чтобы ещё вам хотелось увидеть в языке PHP в будущем? Пишите комментарий, чтобы рассказать что вы думаете.