Хабрахабр

Зарисовки с PHP Russia 2019: чистый код, тёмная магия

После долгой паузы они получили полностью заточенную под них площадку; в анонсе мы сравнили её со стадионом, какого у пиэйчпишников, одной из команд «высшего IT-дивизиона», не было. 17 мая в московском «Инфопространстве» прошла первая профессиональная конференция для PHP-разработчиков PHP Russia 2019. В то же время на событие возлагали большие надежды, и задача угодить всем заинтересованным виделась неординарной. И первый свой сезон «стадион» встретил как минимум достойно, с тем отличием от футбольного прообраза, что тут сложно провести строгое разделение между игроками и фанатами.
За период «великого пиэйчпишного оледенения» — больших конференций по PHP в России не проводилось ни много ни мало девять лет — у сообщества вокруг языка назрела потребность в таком месте встречи. Но у страха глаза велики, а у здоровой паранойи хорошее периферическое зрение: опыт IT-ивентов на нашей организаторской стороне вместе с силой «PHP-магии» на стороне программного комитета и с авторитетом его участников в индустрии позволили, как нам кажется, организовать зрелое мероприятие с первой попытки.

Немаленькой была и онлайн-аудитория — подключилось несколько сотен зрителей. Прибыло на PHP Russia почти 500 человек. В основу программы было «зацементировано» 22 доклада, включая пять от именитых зарубежных спикеров, а также три митапа и выступления в импровизационном формате Unconference в отдельном потоке.

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

Условно говоря, чтобы самые хитовые шли параллельно и ни один не перетягивал на себя большинства аудитории. Александр Макаров, соорганизатор конференции
— Мы в программном комитете долго думали и в конце концов перетряхнули сетку так, что пазл сложился: отказались от задумки вынести англоязычных спикеров в отдельный поток, смотрели, чтобы доклады взаимно уравновешивались. 4 следовало выступление, посвящённое 8. Конечно, были и концептуальные связки внутри каждого трека: так, сразу после выступления Дэйва Лиддамента, который, рассуждая о статическом анализе PHP-кода, порядочно внимания уделил PHPStorm, в том же зале стартовал доклад Кирилла Смелова, где разбиралось устройство этой IDE, а за рассказом про новшества в PHP 7. 0.

Про темы

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

Среди основных векторов интереса на конференции выделялись будущее самого языка, его архитектура и стандартизация, асинхронное программирование на PHP, его лучшие практики и неявные возможности, работа с конкретными фреймворками и даже machine learning с применением PHP-стека.

Ключевые доклады

Программный комитет подходил к отбору докладов скрупулезно, потому выделить «самые крутые» было проблематично: откровенно проходных блоков в программе не было, во всяком случае по результатам первого фидбэка от гостей. Так что в качестве примеров нам пришлось выделить несколько из числа:

  • самых многолюдных;
  • самых ожидаемых;
  • самых богатых на неожиданности.

Никита Попов: Typed Properties and more. What’s coming in PHP 7.4?

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

4 состоится 6 июня 2019 года, а релиз 7. Согласно ориентировочному таймлайну, альфа-релиз версии 7. Ну а год спустя, в декабре 2020-го, выйдет и овеянная слухами «восьмёрка». 4 GA выкатят 21 ноября.

4: Главное, что получит воплощение в PHP 7.

  • типизированные свойства;
  • FFI — Foreign Function Interface, для работы с внешними функциями на C;
  • стрелочные функции;
  • — предварительная загрузка;
  • — оператор ??=;
  • — ковариантные типы возврата;
  • — слабые ссылки (WeakReference);
  • — добавление оператора для массивов.

Едва ли не самое долгожданное нововведение в грядущей версии — возможность задавать типы для свойств класса. Примечательно, что такое свойство обязательно должно быть явно инициализировано, и если его значение по умолчанию не указано, оно не сделается null — нет, в подобной ситуации будет вызвано исключение. Также среди прочего typed properties помогут воплотить в PHP что-то наподобие до сих пор отсутствующих в языке intersection types. Иначе говоря, указывать сразу несколько типов для аргументов.

4 — «дебют» стрелочных функций. Второе существенное изменение в PHP 7. Это однострочные анонимные функции — бесполезный, как уверена часть разработчиков, синтаксический сахар, хотя другие его считают как раз таки полезным.

Вот что он делает: если в выражении параметр слева не существует или имеет значение null, ему присваивается значение параметра справа. Нельзя также обделить вниманием оператор ??=, который ранее отсутствовал в языке.

Однако Никита сразу сделал оговорку, что их полноценное внедрение — дело не из лёгких. Из вероятных нововведений, которые по-прежнему находятся на стадии обсуждения, были упомянуты дженерики.

4 устаревшими, — их оказалось несколько. Что до возможностей, которые признаны в версии 7. Также будет понижен приоритет оператора конкатенации: если он используется вместе с операторами сложения или вычитания, те будут обработаны первыми. Выброшена на свалку истории обработка тернарного оператора слева направо — в «восьмёрке» такой синтаксис будет порождать ошибку.

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

Никита Попов:
— Я думаю, что typed collections будут у нас в форме дженериков.

Дмитрий Стогов: Самое интересное в PHP 8

Он поведал о чуть более отдалённом будущем языка — о сакраментальной версии 8. Линию, которую начал Никита Попов, продолжил другой видный контрибьютор ядра PHP — Дмитрий Стогов, ведущий инженер Zend Technologies. Последние годы он сосредоточился на повышении производительности PHP и с тем же акцентом построил свою историю. 0.

Значительных рывков производительности удалось добиться с релизами 5. На протяжении полутора десятков лет язык «ускорялся». 0. 1 и 7. Однако 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

AOP. Полный зал после обеда собрал Александр Лисаченко, руководитель веб-разработки в Alpari, участник программного комитета PHP Russia 2019, создатель и ведущий разработчик аспектно-ориентированного фреймворка Go! — магии. Он предложил взгляд на язык через призму — наш подзаголовок не врёт!

Как интуиция — это скрытая от рассудка логика, так магия в языке программирования — это эксплуатация нештатных или малоизвестных возможностей этого языка с опорой на глубокое знание его внутреннего устройства, «искривлений» и лазеек.

Спикер постепенно подобрался к тому, как использовать выверты, обнаруженные им за годы копания в нутре PHP, на благо кодинга. Александр продемонстрировал в качестве дивертисмента несколько трюков, которые многим из сидевших в зале (причём джуниоров среди них было меньшинство) взорвали мозг.

Хотя нельзя было не отметить и парадоксальную красоту того, что хейтеры PHP предпочли бы назвать врождёнными изъянами. Магические методы, нестандартные способы доступа к свойствам, изменение контекстов, потоковые фильтры, — всё это и многое другое «маэстро Лисаченко» разобрал с прагматической точки зрения. Не знаем, не знаем… Нам нравится.

AOP. Особое внимание Александр уделил аспектно-ориентированному программированию на PHP, которое в полном соответствии с принципом practice what you preach использует в хвост и в гриву и которое как раз таки положил в основу своего фреймворка Go!

Дэйв Лиддамент: Practical advanced static analysis

Будучи автором опенсорсного инструмента SARB, или Static Analysis Results Baseliner, он развернул перед аудиторией своего рода дорожную карту по внедрению статического анализа, чтобы каждый мог позаимствовать из его обзора решения и приёмы по своему разумению, под свой стек и свои потребности. Dave Liddament, директор Lamp Bristol, поделился с публикой своими наработками по части продвинутого статического анализа PHP-кода. Или чтобы использовать доклад как целостный мини-гайд для внедрения статического анализа.

Акцентируя важность среды разработки как части арсенала для статического анализа, наш гость искренне нахваливал PHPStorm, чем, похоже, приятно удивил модератора секции, Романа Пронского из JetBrains, который эту IDE у себя в компании и курирует.

Начал Дэйв с необходимости базовых проверок:

  • Линтинга.
  • Проверок на соблюдение стандартов программирования (в том числе для оценки консистентности кода, который пишут внутри команды), например с помощью PHP CS Fixer.
  • Анализа кода с точки зрения безопасности. В качестве такого инструмента спикер порекомендовал Security Checker от SensioLabs, авторов Symfony.
  • Проверки на забытые var_dump.
  • Автоматической проверки синхронизации composer.json и composer.lock (composer validate)

Эти и массу других инструментов для статического анализа кода желающие найдут в одном славном репозитории GitHub.

Для адептов Symfony доклад был полезен вдвойне: тем, кто использует фреймворк в работе, он дал ещё целую россыпь советов и подсказок по внедрению статического анализа кода.

Отдельный акцент он сделал на работе в условиях Continuous Integration (и тоже кое-какой инструментарий слушателям посоветовал). Дальше Дэйв углубился в нюансы применения более продвинутых инструментов, в первую очередь Psalm, Phan и PHPStan.

Например, пусть неверно указанный тип параметра и не породит ошибку в вашем 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!

S. P. Как кое-кто из вас знает, коренной хабровчанин и участник программного комитета PHP Russia Константин Буркалев также ведёт айтишные подкасты. Напоследок — маленький бонус. С первым он поговорил про асинхронный PHP, многозадачность и долгоживучесть PHP-процессов, со вторым — про Rest API и GraphQL, плюсы и минусы подходов, области и задачи применения. И очередной, 104-й выпуск его SDCast — это интервью, которые он взял у двух в высшей мере достойных спикеров конференции, Антона Шабовты и Антона Морева. Приятного прослушивания!

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть