Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
17 мая в московском «Инфопространстве» прошла первая профессиональная конференция для PHP-разработчиков PHP Russia 2019. После долгой паузы они получили полностью заточенную под них площадку; в анонсе мы сравнили её со стадионом, какого у пиэйчпишников, одной из команд «высшего IT-дивизиона», не было. И первый свой сезон «стадион» встретил как минимум достойно, с тем отличием от футбольного прообраза, что тут сложно провести строгое разделение между игроками и фанатами.
За период «великого пиэйчпишного оледенения» — больших конференций по PHP в России не проводилось ни много ни мало девять лет — у сообщества вокруг языка назрела потребность в таком месте встречи. В то же время на событие возлагали большие надежды, и задача угодить всем заинтересованным виделась неординарной. Но у страха глаза велики, а у здоровой паранойи хорошее периферическое зрение: опыт IT-ивентов на нашей организаторской стороне вместе с силой «PHP-магии» на стороне программного комитета и с авторитетом его участников в индустрии позволили, как нам кажется, организовать зрелое мероприятие с первой попытки.
Прибыло на PHP Russia почти 500 человек. Немаленькой была и онлайн-аудитория — подключилось несколько сотен зрителей. В основу программы было «зацементировано» 22 доклада, включая пять от именитых зарубежных спикеров, а также три митапа и выступления в импровизационном формате Unconference в отдельном потоке.
Конференция шла в три потока, и выбирать, куда пойти, было бы мучительно, если бы не было возможности позже посмотреть записи трансляций всего, что происходило в основной программе.
Александр Макаров, соорганизатор конференции
— Мы в программном комитете долго думали и в конце концов перетряхнули сетку так, что пазл сложился: отказались от задумки вынести англоязычных спикеров в отдельный поток, смотрели, чтобы доклады взаимно уравновешивались. Условно говоря, чтобы самые хитовые шли параллельно и ни один не перетягивал на себя большинства аудитории. Конечно, были и концептуальные связки внутри каждого трека: так, сразу после выступления Дэйва Лиддамента, который, рассуждая о статическом анализе PHP-кода, порядочно внимания уделил PHPStorm, в том же зале стартовал доклад Кирилла Смелова, где разбиралось устройство этой IDE, а за рассказом про новшества в PHP 7.4 следовало выступление, посвящённое 8.0.
Про темы
Как и было задумано, львиная доля выступлений была построена вокруг специфических для PHP тем, в значительной части весьма и весьма хардкорных.
Среди основных векторов интереса на конференции выделялись будущее самого языка, его архитектура и стандартизация, асинхронное программирование на PHP, его лучшие практики и неявные возможности, работа с конкретными фреймворками и даже machine learning с применением PHP-стека.
Ключевые доклады
Программный комитет подходил к отбору докладов скрупулезно, потому выделить «самые крутые» было проблематично: откровенно проходных блоков в программе не было, во всяком случае по результатам первого фидбэка от гостей. Так что в качестве примеров нам пришлось выделить несколько из числа:
- самых многолюдных;
- самых ожидаемых;
- самых богатых на неожиданности.
Никита Попов: Typed Properties and more. What’s coming in PHP 7.4?
В хедлайнеры конференции заслуженно попал Никита Попов, один из наиболее деятельных и заметных core-разработчиков непосредственно PHP. Его доклад — среднее между чейнджлогом с авторскими комментариями (плюс примерами кода) и визионерским экскурсом в будущее языка. Последовательно и ёмко Никита объяснил, что ждёт нас в PHP ближайшей версии и далее.
Согласно ориентировочному таймлайну, альфа-релиз версии 7.4 состоится 6 июня 2019 года, а релиз 7.4 GA выкатят 21 ноября. Ну а год спустя, в декабре 2020-го, выйдет и овеянная слухами «восьмёрка».
Главное, что получит воплощение в PHP 7.4:
- типизированные свойства;
- FFI — Foreign Function Interface, для работы с внешними функциями на C;
- стрелочные функции;
- — предварительная загрузка;
- — оператор
??=
; - — ковариантные типы возврата;
- — слабые ссылки (WeakReference);
- — добавление оператора
…
для массивов.
Едва ли не самое долгожданное нововведение в грядущей версии — возможность задавать типы для свойств класса. Примечательно, что такое свойство обязательно должно быть явно инициализировано, и если его значение по умолчанию не указано, оно не сделается null — нет, в подобной ситуации будет вызвано исключение. Также среди прочего typed properties помогут воплотить в PHP что-то наподобие до сих пор отсутствующих в языке intersection types. Иначе говоря, указывать сразу несколько типов для аргументов.
Второе существенное изменение в PHP 7.4 — «дебют» стрелочных функций. Это однострочные анонимные функции — бесполезный, как уверена часть разработчиков, синтаксический сахар, хотя другие его считают как раз таки полезным.
Нельзя также обделить вниманием оператор
??=
, который ранее отсутствовал в языке. Вот что он делает: если в выражении параметр слева не существует или имеет значение null, ему присваивается значение параметра справа.Из вероятных нововведений, которые по-прежнему находятся на стадии обсуждения, были упомянуты дженерики. Однако Никита сразу сделал оговорку, что их полноценное внедрение — дело не из лёгких.
Что до возможностей, которые признаны в версии 7.4 устаревшими, — их оказалось несколько. Выброшена на свалку истории обработка тернарного оператора слева направо — в «восьмёрке» такой синтаксис будет порождать ошибку. Также будет понижен приоритет оператора конкатенации: если он используется вместе с операторами сложения или вычитания, те будут обработаны первыми.
По завершении выступления Никиту завалили вопросами, на которые тот постарался ответить предметно, насколько мог, благодаря чему слушатели получили несколько ценных наводок.
Никита Попов:
— Я думаю, что typed collections будут у нас в форме дженериков.
Дмитрий Стогов: Самое интересное в PHP 8
Линию, которую начал Никита Попов, продолжил другой видный контрибьютор ядра PHP — Дмитрий Стогов, ведущий инженер Zend Technologies. Он поведал о чуть более отдалённом будущем языка — о сакраментальной версии 8.0. Последние годы он сосредоточился на повышении производительности PHP и с тем же акцентом построил свою историю.
На протяжении полутора десятков лет язык «ускорялся». Значительных рывков производительности удалось добиться с релизами 5.1 и 7.0. В эпоху «семёрки» происходил плавный рост: увеличение скорости выполнения кода от версии к версии не было радикальным. Однако PHP 8.0 обещает разработчикам мешок подарков. Их ждёт много чего интересного.
Говорим «интересное» — подразумеваем JIT? Не совсем. Да, действительно, динамическая компиляция just-in-time сулит подъём performance в версии 8,0, но… только в синтетических тестах, в реальных же приложениях возможно даже замедление, пусть незначительное. Однако улучшения возможны.
Дальше началось «мясо»: Дмитрий углубился в основы работы PHP и JIT в нём, попутно растолковав, «что не так с JIT», и поделился с публикой тем, как в «восьмёрке» будут связаны JIT, механизм предварительной загрузки и FFI и за счёт чего они призваны поднять производительность PHP-кода.
Вышеупомянутая триада открывает перед PHP новые сферы использования. Можно будет писать расширения прямо на PHP, подключать сторонние С-библиотеки, без лишнего труда создавать прототипы…
Но, как честный инженер, Дмитрий не только наметил головокружительные возможности, которые будут доступны в восьмой версии языка, но и предупредил о её недостатках, а скорее, «неоптимальностях». Конечно, здорово, что с preloading скрипты загружаются при старте PHP, однако без рестарта их не заменить, а некоторые могут работать с предзагрузкой не так, как задумано. Конечно, чудесно, когда благодаря FFI можно оперировать структурами данных, определёнными на C, а API у самого интерфейса простой и приятный, только вот FFI открывает тысячу новых способов выстрелить себе в ногу, а его производительность без JIT сравнительно низка.
Вместе с тем плюсов от сочетания технологий, которые лежат в фундаменте «восьмёрки», больше, чем минусов. Вдобавок многие из возможностей, о которых Дмитрий упомянул в докладе, можно будет пощупать уже в версии 7.4.
Александр Лисаченко: Школа магии PHP
Полный зал после обеда собрал Александр Лисаченко, руководитель веб-разработки в Alpari, участник программного комитета PHP Russia 2019, создатель и ведущий разработчик аспектно-ориентированного фреймворка Go! AOP. Он предложил взгляд на язык через призму — наш подзаголовок не врёт! — магии.
Как интуиция — это скрытая от рассудка логика, так магия в языке программирования — это эксплуатация нештатных или малоизвестных возможностей этого языка с опорой на глубокое знание его внутреннего устройства, «искривлений» и лазеек.
Александр продемонстрировал в качестве дивертисмента несколько трюков, которые многим из сидевших в зале (причём джуниоров среди них было меньшинство) взорвали мозг. Спикер постепенно подобрался к тому, как использовать выверты, обнаруженные им за годы копания в нутре PHP, на благо кодинга.
Магические методы, нестандартные способы доступа к свойствам, изменение контекстов, потоковые фильтры, — всё это и многое другое «маэстро Лисаченко» разобрал с прагматической точки зрения. Хотя нельзя было не отметить и парадоксальную красоту того, что хейтеры PHP предпочли бы назвать врождёнными изъянами. Не знаем, не знаем… Нам нравится.
Особое внимание Александр уделил аспектно-ориентированному программированию на PHP, которое в полном соответствии с принципом practice what you preach использует в хвост и в гриву и которое как раз таки положил в основу своего фреймворка Go! AOP.
Дэйв Лиддамент: Practical advanced static analysis
Dave Liddament, директор Lamp Bristol, поделился с публикой своими наработками по части продвинутого статического анализа PHP-кода. Будучи автором опенсорсного инструмента SARB, или Static Analysis Results Baseliner, он развернул перед аудиторией своего рода дорожную карту по внедрению статического анализа, чтобы каждый мог позаимствовать из его обзора решения и приёмы по своему разумению, под свой стек и свои потребности. Или чтобы использовать доклад как целостный мини-гайд для внедрения статического анализа.
Акцентируя важность среды разработки как части арсенала для статического анализа, наш гость искренне нахваливал PHPStorm, чем, похоже, приятно удивил модератора секции, Романа Пронского из JetBrains, который эту IDE у себя в компании и курирует.
Начал Дэйв с необходимости базовых проверок:
- Линтинга.
- Проверок на соблюдение стандартов программирования (в том числе для оценки консистентности кода, который пишут внутри команды), например с помощью PHP CS Fixer.
- Анализа кода с точки зрения безопасности. В качестве такого инструмента спикер порекомендовал Security Checker от SensioLabs, авторов Symfony.
- Проверки на забытые var_dump.
- Автоматической проверки синхронизации composer.json и composer.lock (composer validate)
Эти и массу других инструментов для статического анализа кода желающие найдут в одном славном репозитории GitHub.
Для адептов Symfony доклад был полезен вдвойне: тем, кто использует фреймворк в работе, он дал ещё целую россыпь советов и подсказок по внедрению статического анализа кода.
Дальше Дэйв углубился в нюансы применения более продвинутых инструментов, в первую очередь Psalm, Phan и PHPStan. Отдельный акцент он сделал на работе в условиях Continuous Integration (и тоже кое-какой инструментарий слушателям посоветовал).
Познавательна была и классификация багов и «почти багов» от Дэйва, в свете статического анализа кода и с детализацией того, как именно они бьют по разработке. Например, пусть неверно указанный тип параметра и не породит ошибку в вашем workflow, однако по мере усложнения проекта запросто может оказаться граблями, на которые наступит другой член команды. Согласно приведённой в презентации статистике, на подобные evolvability defects (изъяны, вскрывающиеся при эволюционировании кода), приходится приблизительно 80% багов, вылезающих в ходе code review.
А ещё…
Трудно обрисовывать программу конференции пунктиром: весь контент конференции был полезным, однако скрупулёзное перечисление всех 22 докладов даже с кратчайшим изложением их тезисов превратило бы репортаж в нечитаемую простыню, так что упомянем ещё буквально несколько.
Сдержав обещание, Кирилл Смелов из JetBrains погрузился в детали внутреннего устройства PHPStorm, в том числе коснулся того, как при создании IDE задействуется PHP.
Выступление Антона Титова из SpiralScout LLC оказалось тем редким случаем в рамках программы конференции, когда тематически было сделано отклонение от курса «строго на PHP», однако его рассказ о разработке гибридных PHP- / Go-приложений с использованием RoadRunner определённо имел успех.
Томаш Вотруба (Tomáš Votruba), делегат из Чехии, вызвал аншлаг, в подробностях рассказав о том, как сделать рефакторинг крупных массивов legacy-кода менее мучительным и ускорить процесс в разы с помощью решения за его авторством — Rector.
Дмитрий Елисеев (ElisDN) прочёл доклад «Грамотное ООП: организация надёжной бизнес-логики», в котором разобрал в числе прочего, как по уму разделять UI и бизнес-логику.
Unconference и митапы
Ближе к концу основной программы вместо одного из стандартных блоков был опробован формат Unconference — аналог «открытого микрофона»: любой желающий мог выйти и сделать мини-доклад на тему, которая представляется ему занимательной. Пилот такого «IT-стендапа» удался: Александр Макаров поведал о том, каким, скорее всего, будет Yii3, гость из Badoo поделился историей, как они с коллегами сделали прокси для Xdebug, и, наконец, ещё одно спонтанное выступление было посвящено особенностям работы со специализированными принтерами для этикеток и чеком и прикручиванию всего этого хозяйства к PHP.
В отдельном, четвёртом зале после обеда стартовал сет прикладных митапов (и они тоже нашли свою аудиторию):
- «Laravel vs Symfony: сравнение несравнимого».
- «Как контрибьютить в Symfony и зачем это делать».
- «Как использовать Yii2 в Enterprise? Взять лучшие практики из Symfony!»
В свою очередь, партнёры конференции устроили не «кладбище стоек», а ненавязчивую, занятную и уместную движуху. У ManyChat были онлайн-квизы на знание PHP, состязание по созданию и «распутыванию» ботов и крутой кроссворд из регулярных выражений. В уголке Badoo резались в Tech Alias — IT-версию настолки Alias. Ну а на стенде Paxful посетителей ждали «атипичные фиолетовые слоники», стикеры и сладости из Эстонии.
«Закрепление» пройденного
Приятным во всех отношениях кейсом кооперации внутри сообщества стала afterparty: её организаторы устроили совместно с инициаторами митапа Beer PHP. По завершении основной программы желающие, и среди них изрядная часть докладчиков, выдвинулись на «Красный октябрь», чтобы продолжить диспуты в «крафтовой атмосфере».
Что мы думаем про «слонов-2020»
Если совсем лаконично, то PHP Russia 2020 — быть. Помимо базовых, доказавших свою уместность форматов, к следующей конференции обязательно будет и новое. Вишлист и чейнджлог оргкомитета пока в процессе наполнения, но кое-что уже точно ясно.
- Вне всякого сомнения, мы продолжим делать Unconference: народ доволен форматом и просит ещё.
- Попытаемся заказать пиэйчпишных слонов. На PHP Russia 2019 их не было: оказалось, что права на них принадлежат ребятам из Франции, а те очень уж небыстрые — заказывать надо за 4–6 месяцев.
- Почти наверняка привезём-таки Марко Пиветту (Marco Pivetta), который был у нас в программе, но отвалился в последний момент по независящим от него причинам. Ещё имеем виды на отца Symfony Фабьена Потенсье (Fabien Potencier). В конце концов, постараемся привезти и Расмуса Лердорфа: мы его звали и на первую конференцию, но у него возникли пересечения с другими мероприятиями.
В общем, stay tuned!
P. S. Напоследок — маленький бонус. Как кое-кто из вас знает, коренной хабровчанин и участник программного комитета PHP Russia Константин Буркалев также ведёт айтишные подкасты. И очередной, 104-й выпуск его SDCast — это интервью, которые он взял у двух в высшей мере достойных спикеров конференции, Антона Шабовты и Антона Морева. С первым он поговорил про асинхронный PHP, многозадачность и долгоживучесть PHP-процессов, со вторым — про Rest API и GraphQL, плюсы и минусы подходов, области и задачи применения. Приятного прослушивания!