#14 Какое будущее ждет PHP? / Валентин Удальцов
(00:00.11)
у по-моему, Contributor даже есть в PHP, да? Да, я недавно в PHP 8.4 законтрибютировал RFC, который позволяет, когда пишешь new, дальше имя класса, и вот чтобы потом сразу на этом new вызвать на объекте какой-то метод или свойство, ты должен еще раз скобки все обернуть. Я разрешил этого не делать, как это можно в Java, в C Sharp. Вот, соответственно, этот RFC...
в PHP 8.4, который, собственно, зарелизится в ноябре. Это мой первый пока консервит. ну это довольно серьезно. А можешь прям в двух словах про процесс? То есть был RFC, стоял уже там Ишьюс. Чуть подробнее можешь рассказать? Да, смотри, на самом деле RFC не супер сложный, то есть все, что мне нужно было поправить, это грамматику и написать тесты. Ну, то есть довольно просто.
При этом, наверное, интересна еще предыстория этого РФС.
(01:06.414)
Когда-то 10 лет назад, там я даже по-моему считал, сколько, забыл, я работал на своей первой IT работе, и у нас был там такой прошаренный чувак, который много языков всяких знал, и он как-то раз сказал там в сердцах, что вот, блин, как бесит, что нужно скобки ставить, было бы клёво, чтобы их не нужно было, как в Java, я тогда не знал, что в Java как-то можно ещё, и у меня это, представляешь, на подкорке было всё это время, и зимой, вот последней зимой...
мы сидим с женой там в эко-отеле, и я думаю, хочется, что-то вот Рома Пронск, есть такой чувак, который раньше делал PHP-дайджесты на Хабре, и он говорит, было бы круто, если бы ты поконтрибитил в PHP. Я говорю, да, как бы было бы интересно, но я на Си никогда не писал, и у меня всплыла в голове эта идея, я думаю, дай-ка попробую, и ты знаешь, я вот сел за завтраком в отеле,
И что-то та-та-та-та-тяп-ляп, и у меня что-то получаться. То есть, ну вот я поправил грамматику, разобрался, как там все эти конструкции работают. И как бы и у меня собралось. И заработали и старые тесты, и новые. Я думаю, да ладно, вот. И потом вот с зимы начался очень долгий процесс, собственно, того, как это нужно притворить в жизнь. Сначала я сделал наоборот все. Я сделал pull request, то есть я на радостях, что у меня есть рабочий код, все как бы, все есть. Я просто сделал pull request.
Но на самом деле правильно сначала делать во внутреннюю рассылку, называется PHP internals, ты присылаешь письмо о том, что есть такая идея, это даже не RFC еще, и тебе там накидывают комментарии. Потом ты, собственно, уже делаешь RFC, и все его тоже обсуждают, и потом ты его выносишь на голосование. меня был полреквест, Рома его зафорсил в твиттер, в итоге там миллиард комментариев, потому что кто-то говорит, что я всю жизнь этого ждал, ой, умоляю, смёрзь где-то поскорее.
Кто-то наоборот говорил, что типа «о, это не очевидно», там «непонятно, что-кабудет и функцию», ну какой-то бред, короче, нет, это всё там понятно, просто непривычно людям. Вот. И в общем, я понял, что обратная связь классная, в полреквестию меня там чуть ли не 200 было лайков, что на Гитхабе ну прям редкость. И потом я уже начал писать RFC, но что-то мне там стало лень, плюс январь как-то уже пошли какие-то дела, и потом я к этому вернулся где-то, наверное, в начале весны, дописал RFC.
(03:25.197)
сделал в рассылку письмо и уже все начали обсуждать там все за в целом были не против я вынес его на голосование прошло еще какое-то время там по мне две недели на голосование дается ну и там было не помню там типа 5 против 30 за ну какое-то такое соотношение сейчас не помню вот он как бы радостно прошел вот такой процесс был то есть он организационно бюрократически довольно длинный а еще потом review или то есть даже когда рфс приняли
Уже начинается ревью этого полреквеста, такими ответственными, крутыми ребятами. Сначала Дима Стогов посмотрел, сказал, все окей. А потом Никита Попов заглянул. Сейчас уже не особо PHP занимается, он в HHVM шел. Вот, но он все равно посмотрел, нашел там проблему, говорит, это вот так, это так. Ну, как бы в целом все окей, но я немножко переделал. Вот, и все, и как бы смерджили где-то по-моему летом уже. Такая история. Обалдеть, и это...
Да, это просто поменять грамматику, при том, что там тестов полно понаписано, это довольно такая чистая история, да, там нет никаких внутренних взаимодействий серьезных, и... Да, я на сейвену как-то не срочно кодали написал, да, на сейвену. Если что-то серьезное менять, это был бы просто, наверное, какой-то капец вообще бесконечный. Кстати, интересно, вот ты говоришь, внутренняя рассылка, просто хотелось уточнить, нету... не проще все это делать там...
типа через ВИШуся, просто я в этих процессах глубоко не участвовал, только со стороны смотрел. Они все так примерно устроены, да, что у тебя обязательно какие-то списки, рассылки, потому что ощущение, что все-таки это немножко устаревшие подходы. Да, это реально очень по-старперски, и многие жалуются. Там даже смотрят, когда ты обычно письмо пишешь, я даже у жены вот спрашивал на работе, как она делала, ты отвечаешь на письмо, и обычно ты пишешь, по-моему, вверху, а цитирование внизу, по умолчанию, во всех клиентах.
почтовых, а они просят наоборот, не топ-постить, что ты должен, наоборот, внизу писать, то есть даже ты можешь письмо неправильно написать. Вот, и да, это устаревшая история, которой стоят там некоторые мастодонты, просто PHP, и не разрешают всем проходить в какие-то более прогрессивные технологии. Вообще PHP же ушел на GitHub в какой-то момент, он раньше хостился там тоже на чем-то непонятном, я уже не помню.
(05:43.405)
И естественное желание было всех писать Wishus, ну как бы GitHub, отлично, всем привычно, понятно. Вот. Но даже мой полреквест, поскольку реакция была просто феноменальная на это предложение, то там все начали написывать, там было много сообщений, его заблокировали. Ну то есть закрыли для обсуждения какое-то время, потом кто-то его разблокировал во время RFC, там опять начали туда писать, опять заблокировали. И только когда уже приняли, его разблокировали.
И вот Рома Пронский, это, собственно, человек, который сейчас стоит у истоков PHP Foundation, организация, которая на Open... Как это называется-то? Open Foundation? Нет, как-то... Короче, вот где можно искать деньги для open-source-проектов, вот, на этой платформе он, собственно, там разные идеи двигает, вообще...
привлекли инвестиции с разных компаний, которые заинтересованы в развитии PHP, и дальше эти деньги выделяют под написание кода на PHP под его развитие. И вот Рома там активно двигает идею о том, что посмотрите на Rust, посмотрите на TypeScript, посмотрите на что угодно. У всех все сообщество в каком-то нормальном современном инструменте общается. Давайте мы уйдем от этих рассылок и что-то сделаем. И он даже сделал уже вот этот сервер. Discourse, по-моему, название Discord, Discourse.
Вот, но пока туда не мигрировали, потому что там есть чуваки, которые уже достаточно преклоном возраста, но они активно с PHP работают, и они почему-то считают, что e-mail-ы — это вот топ. Ну да, это, нечто напоминает. Пример... конечно, языки... Прям видно, какая есть связь между вот этой привязанности к старой культуре и отсутствием популярности, потому что я в Ирландии то же самое наблюдал, потому что когда я начал активно писать...
Я начал в 2015 году, потом возвращался в 2017-18. И там была проблема, что они до сих пор на Makefile'ах, и там просто не было банально... Вот Rebar там есть, типа штука для управления зависимостими. Там не Lockfile'ов не было. Ну, то есть он был деревянный как дрова, и куча вещей делалось по-прежнему через Makefile'ы. И на любые попытки, как бы, типа, ребят, современные языки вообще надо начинать с инфраструктуры, удобной для разработчиков, да? Там пакетный менеджер, который тебе все делает. Ну, вот этой красоты.
(08:05.005)
нет make-файлы, там с трэшом, и в итоге люди тоже все плевались, плакали, и в итоге, ты знаешь, Elixir сделали. Ну не только по этим причинам, но в Elixir'е попытались решить в том числе эти проблемы. Мне, кстати, знаешь, наверное, из экосистем многих в этом плане нода нравится, потому что вот она вбирает в себя просто всегда. То есть, если кто-то где-то что-то сделал, ноду тут же берет, это адаптирует и улучшает. То есть, вот даже процесс, который сейчас там есть, да, он довольно классный.
Круто, да. без сомнения, то есть мы с ним об этом, когда созваниваемся, просто иногда нас какой-то часть... Ну, мы так подружеские давно подружились, И часть нашего созвона — всегда какое-то ругательство по поводу того, что какие-то вещи очень тяжело сдвинуть. Я-то даже не имею к ним отношения, но он прям с этим работает ежедневно. И, в общем, а я просто это вижу, вот, ну вот, соприкоснулся и сразу понял, как всё тяжело и плохо.
И ведь в PHP особенно нужно уделить этому внимание, потому что многие языки сейчас пишутся на самих себе, там Go, Rust, TypeScript, там еще что-то. А PHP ты пишешь на C, то есть у тебя в любом случае людей сильно меньше может задействовать, не могут обычные PHP-шники писать на C. Вот, поэтому нужно вот все остальное максимально упростить, сделать удобным и так далее.
Вот, ну, тем не менее, даже несмотря на эти сложности PHP вот 8.4.8, там куча фичей новых, как-то работает, черт Вот, мы с тобой подходим к этому моменту. Да, сегодня у меня был выпуск уже прикольный, кстати, получился достаточно популярный по поводу будущего ноды. Там есть о чем поговорить, да, и было о чем поговорить. И по PHP абсолютно то же самое, потому что этот язык немножко... То есть мы... Сколько ты уже программируешь в целом и на PHP конкретно?
Да, я начал с PHP, наверное...
(10:05.709)
Ох, я на втором курсе начал что-то параллельно, наверное, именно на PHP пробовать, а второй курс это был 2012 год, то есть вот сколько уже, 12 лет, наверное, типа того. Капец, да? 2012 год уже 12 лет, а я к 2012 году уже закончил на PHP писать. Я начал писать на PHP в 2007 году, и не знаю, ты знаешь эту историю или нет, мне супер повезло, потому что когда я начал писать, я почти сразу попал на Диму Котирова. То есть я у него работал.
Это чувак, который сделал мой круг, который написал PHP в подлиннике, Denver, это всё он. Вот, и мне повезло с ним поработать, и мы там и фреймворки свои писали, много чего интересного там происходило. Он, правда, уже в штаты давно уехал, кстати, надеюсь, что я смогу его как-нибудь вытащить на тоже подкастик поболтать. Вот, и тогда, конечно, ну представь, те года, это вообще...
не тогда ладно рельса еще набирала популярность но в целом php был на полном коне и честно говоря казалось что так будет всегда до у тебя цмски у тебя битрикс у тебя ворд пресс у тебя весь бизнес на этом даже сейчас если посмотреть на количество сайтов сделанных статистика по крайней мере говорит о следующем что 80 процентов сайтов это конечно очень примерно потому что понятно дело там все сложнее тем более сейчас очень много экосистем и платформ а с этим просто сложно считать датуши платформа там может быть миллиарды сайтов этих
что 80 % всех сайтов на PHP, даже больше по-моему, а 30 % это вообще WordPress, скорее всего, опять же платформенный, тут тоже по-разному бывает. Ну, в общем, и что произошло? В какой-то момент что-то произошло, то есть, сейчас я тебя тоже об этом спрошу, такое просто короткое мое представление какое-то, что мир сместился в сторону готовых платформ.
у тебя появилась Tilde, у тебя Shopify, тебя вообще все есть, что надо, и соответственно все в эту сторону массово двинулись. Это эффективнее, быстрее, там за тебя многие проблемы решают, и в конечном итоге сейчас очень многие вещи скатились скорее, ну свелись к интеграциям. То интеграция сейчас гораздо важнее, чем непосредственная разработка для малого бизнеса, даже для некоторых средних бизнесов. И вот на текущий момент, например, мы учим PHP разработчиков. Я знаю, что есть спрос. То есть как это ни странно,
(12:18.701)
но джунеров по PHP разбирают достаточно неплохо и даже лучше, чем по некоторым другим направлениям. И вот дальше провал. есть вот типа, а что глобально происходит? Хотя, кстати, недавно мы, на Ларавелле для нашего колледжа запилили одну штуку, и понятно, что видно, там, развитие, да, видно, что происходит. Но ты сам понимаешь, каждый раз, когда ты говоришь с людьми, каждый раз, когда ты кого-то ищешь, вот этот флёр типа из серии «Время PHP прошло», на нём не стартуют новые проекты, только legacy, он есть.
И я не пытаюсь как бы переубедить, но я хочу понять, что происходит на самом деле, потому что я уверен, что вообще-то все не совсем так, потому что мы знаем и видим какие там, ну, во-первых, как язык развивается, да, и сколько классного софта существует и пишут. Вот, собственно, об этом мы тобой сегодня во многом и поговорим. Давай, наверное, вот про общую вот эту тенденцию расскажи, с этого начнем, а дальше уже в детали пойдем. Я думаю, что вся проблема в том, что был период, когда PHP потерял очень много времени, это вот, наверное, как раз...
в районе, когда PHP 6 пытались сделать, когда 5 как-то тухло, развивалось. И потом это просто аукнулось, потому что, наверное, многие фичи, которые сейчас доделываются, те мысли, которые сейчас людей посещают, их тогда можно было имплементировать или, может быть, не допустить каких-то ошибок. Но какой-то был провесон, уж я, к сожалению, не знаю, с чем он так глобально был связан. Вот, а теперь мы...
активно в догоняющей такой позиции, PHP ухватывает что-то из котлена, что-то из джавы, что-то еще откуда-то, пытается вот в обратить какие-то вещи, чтобы догнать. Плюс маркетингу PHP ну какой-то никакой. Было время, PHP все пользовались, и вот на этой волне все были уверены, что так будет, наверное, всегда, и профукали какие-то очень важные вещи, то, о чем мы уже поговорили.
то как работать с сообществом, то как упрощать процесс внесения изменений, то как нужно организовать работу, сделать какие-то дорожные карты правильные, как во многих языках есть PHP. Вот даже сейчас я смотрю, там люди накидывают идеи. то ли потому что я на эти рассылки подписался недавно, меня просто эффект новизны, то ли потому что реально все-таки стало поактивнее сообщество, но...
(14:32.525)
постоянно накидываются идеи, но я понимаю, что когда их принимают или не принимают, такое случайное блуждание. Бернулевское. Либо да, либо нет, ну в конечном счете. И нету какой-то большой конвей, какого-то большого плана, вот куда мы хотим прийти по каким-то фичам. Этого сильно не хватает. Хотя вот это PHP Foundation, я Рому спрашивал, они собираются как-то вот это все-таки решить эту проблему, какие-то сделать долгосрочные планы.
Я вот недавно смотрел у Бугаенко интервью с одним из тех, кто у Котлина стоял. Я забыл, к сожалению, его фамилию, кто вот прям у истоков Котлина стоял, и сейчас он в Россию вернулся и ушел из JetBrains. Вот, и он прям рассказывал, насколько у них классное планирование было. То есть они всегда понимали, чему они идут. Вот дизайн языка очень классно продумался. В PHP этого до сих пор нету, и вот эта неорганизованность, ну, она всегда приводит к проблемам.
Ну и в PHP по-прежнему не хватает каких-то фич, которые на самом деле есть, но они не такие явные. Например, в PHP давно можно писать асинхронный код. У генераторы 100 лет существуют, там, как и в JS под капотом. Все эти Async and Wait, это сахарок над генераторами. В PHP 100 лет с 5.6 генератором или 5.4, ну то есть это я еще, наверное, не начал писать в него. Но дальше файберы появились, да, это 8.0 или 8.1, сейчас не скажу точно.
и можно давно писать Async and Wait, но там мало драйверов не блокирующих, соответственно ты все время в это упираешься, нету этого сахара. И люди, которые еще сегодня писали на PHP, а завтра ушли в ГО, таки веселые, начали там эти горутины тысячами создавать, они могли то же самое делать в PHP еще вчера, но просто они как бы не понимают этого, не знают этого, это не раскручено, это как-то недоделано слегка.
Вот, оказалось бы, ну а в чем разница? Пожалуйста, допиши ты этот асинхронный код и не блокируйся ты, вызовем мы базу и неумирающие сервера все давно есть и все такое. Нет, мне кажется это естественный процесс, у тебя любая штука, которая вот таким образом доходит до точки, она же потом начинает падать и разбирать эти то, например, я вот на Rails пишу, да.
(16:47.213)
время рейлс такого типа когда стартуем каждый проект оно как бы прошло но это сумасшедшая крутая вещь которая по-прежнему там уделывает всех но ты тоже смотришь и думаешь блин ну как бы немножко несправедливо происходит то есть это не по объективным причинам это исключительно вот просто какие-то ну вот как-то вот так вот двигается мир но единственное знаешь про что хотел сказать все-таки про го такую вещь несмотря на то что а знаешь мне что это еще напоминает я вот всегда вспоминаю на при историю с метро вот например нью-йоркское метро
Ты же знаешь, сколько у него проблем есть, То есть там постоянно закрыто, там очень много проблем. они... там до сих пор древние вот эти вот системы переключения там чуть ли не руками. Но прикол в том, что просто оно появилось гораздо раньше всех. Так же, как и банковская система. Многие вещи, да? Они, например, в Штатах появились сильно раньше и распространились сильно раньше, в остальных местах. На тот момент это была инновация, и всех это побеждало. Но любая такая система под тяжестью своего legacy потом начинает проигрывать. Потому что когда приходят новые игроки, legacy переделывать намного сложнее, да?
И тут вариант такой, что бывают легоси такие, из которого не следишь, им хорошо. Ну, какой-нибудь 1С, например, да? А бывают легоси, или САП. Я вот уверен, они как бы из таких ребят. Oracle тоже, наверное, близко к этому. А есть ребята, которые, вот видишь, все-таки миграции происходят. И если ты не успел как бы что-то придумать, как PHP, например, то вот получилось. Я просто хотел к чему это ГО рассказать. Вот когда я с кем-то общаюсь, меня теория примерно такая, что фактически в какой-то момент
PHP занял то, что он занимать не должен был. есть типа демоны, которые писали когда-то на PHP, вот типа 15 лет назад, например, ну по-хорошему на PHP бы не надо было писать, потому что он не подходил совсем, ни инструментов, ничего. Там даже гарбаж коллектора не было. И скорее я это, знаешь, как воспринимаю, когда люди говорят, вот он падает популярность, я говорю, не, ребят, у PHP просто забирают то, что ему не принадлежало. Он просто залез туда, где его... То есть сейчас, да, конечно, он может.
но просто он даже сейчас не настолько готов с точки зрения экосистемы, наработанных практик да и скажем, ментальности, которая вокруг него сложна, что происходит в такой ситуации, поэтому я говорю, да, это происходит, но не воспринимаете это как типа падение PHP, это скорее нормализация PHP, но вот если мы берем веб, прям веб классический, никакой Go не сравнится с тем, чтобы быстро нахерачить нормальное ВС-шное приложение и фигануть какой-нибудь стартапчик, вы просто обалдеете, если вы сейчас попытаетесь на Go там с ORM-ами что-нибудь сделать.
(19:09.645)
с крудами, кучей вот этих вот логики и всего остального. Ты согласен с такой точкой зрения или нет? Да, я думаю, так и есть. Единственное, по поводу демонизации, согласен, что на тот момент, когда начинали это все затаскивать, привыкли хранить в статике все так или иначе, прячу GlobalState куда-то, как будто бы это классо-ориентированный программен, то что называется.
И начали использовать демонов, конечно там по памяти все падало, Сейчас эта история выправляется, то есть сейчас уже долгоживущие все рантаймы есть, это Roadrunner, это Swool, это вот этот недавно сделали Frankin PHP тоже сервис, якобы он быстрее, чем Roadrunner, там народ спорит и срется, но неважно, хотя написанные на го, кстати, эти сервера естественно Roadrunner и Frankin PHP, вот. Но сейчас уже народ понимает, как работать со стейтом.
есть там все эти контейнеры, всегда у всех ОРМ-ок, которые что-то мемоизируют, есть естественно точки, где можно почистить это, там на
Тут же вопрос не то, кто против или не против, тут вопрос скорее того... Ну знаешь, я тебе такой вот пример приведу, скриптовые языки, они все достаточно похожи, чем люди не говорили, да? И у тебя там говорят, вот там питон подходит подо все, у тебя и руби подходит подо все, у тебя и PHP в целом подходит подо все и так далее. Но ты ничего не сделаешь с массовым вот этим мнением. Вот как-то вот оно, если пошло, сложилось, оно уже вот так вот легко не поменяется. И несмотря на то, что...
делать какой-нибудь ИИ, всякие машинное обучение и так далее, ты можешь на чем угодно. И более того, везде у тебя есть инструменты и так далее. При этом упорно в интернете все Python, Python. Окей, а кто тебе мешает? На Java тоже самое дело. И вот здесь я вижу абсолютно такую же картинку. Мне бы было приятно, честно, если бы PHP смог эту нишу занять, об этом бы говорили и так далее. Но честно говоря, я сомневаюсь, все-таки Go как-то перешел эту черту, когда все. Но единственное, что...
(21:29.709)
Опять же, я не против Go, но хочется, чтобы было какое-то разнообразие. Любая технология переходит в режим падения. И мне в этом плане я немножко угораю над Гошниками, потому что, знаешь, когда ты давно в индустрии, ты начинаешь эти циклы замечать. Мы как-то говорили о том, что эти циклы каждые 8 лет как будто идут. Ну, просто есть такое ощущение. И вот с Go сейчас такой прикол пошел, как с микросервисами, о том, что туда начали внедрять. То есть они сначала, нам не нужны фреймворки, у нас там вот это, вот это, вот это, а сейчас...
И мне, когда это говорят, я им сбрасываю там пять фреймворков, которых по 30 тысяч старов на Гитхабе. Я говорю, ребят, вы посмотрите, какой срач идет, и сколько людей нервничает, что добавляется миллиарды функций, против которых выступали все предыдущие годы. И ты такой думаешь, что же будет еще годика через два-три? Массовая миграция пойдет в Джаву снова или в Котлин или еще что-нибудь? То есть что-то 100 % будет, что непонятно.
Я вот ещё о чём вспомнил ввиду этого. Во-первых, том, что как раз Рома активно говорил о том, что надо бы ещё добавить к PHP хоть позиционирование, чтобы было понятно, для чего этот язык в первую очередь. Потому что, ну да, понятно для веба, но это как-то общё, и сейчас всё для веба тоже, ну опять-таки веб можно что угодно делать. Нужно как зафиксировать, но я не помню, к чему он пришёл, и получилось ли это где-то записать, наверное, это было бы событие, о нём я не слышал.
Вот это бы тоже помогло, то о чем ты говоришь, какое-то четкое понимание, для чего PHP, и когда он выходит за рамки, да, мы понимаем это за рамками, ну там кто-то развлекается.
А теперь по поводу того, что в ГО появляются какие-то фреймворки и так далее, я прекрасно понимаю, почему я такой же любитель писать велосипеды, если ты знаешь или нет, в PHP есть теперь стат анализ, вообще супер строгая типизация с генериками, с условными типами, всё, что хочешь. Ну, бы пока не догоняет уровень TypeScript, но это неплохо, генерики круче, в ГО, например, в PHP, этих PHP Docs.
(23:30.061)
И я этим очень увлёкся, потому что я всё ещё не хочу уходить из PHP, хотя я бы, наверное, давно пора, может быть, другой язык какой-то изучить и него погрузиться. Ну, как-то вот это насиженное место, меня ещё аудитория своя, и так на всё как-то вот удобно, но ты хочешь...
что-то делать уже в PHP, для PHP, вот Open Source и все это классно и в год. И когда ты бизнес делал, бизнесовые проекты делаешь, понятно, да, вот тебе там все дали, сиди, пиши. Но образуются люди, которым нравится, которые любят ГО, они хотят на нем что-то делать для других, что-то упрощать. Это очень, ну, всегда есть такая прослойка людей в любом языке, и отсюда неминуемо будут появляться какие-то инструменты, которые, может быть, даже криво-косо для этого языка выглядят. Ну, как вот, я не помню, я какой-то стрим делал.
там про типы, вот этот наш тайфун, там новый релиз, и там были чуваки, которые в комментариях писали, оставьте его уже PHP в покое там, что только люди не делают, чтобы с динамической типизация получить строгую. Ну и все им там писали, типа, ну тогда не пользуйся, что ты как пришел. Вот, но в год то же самое в любом языке будут обязательно вот желание, какое-то творчество проявить такое, не бизнесовое, а чисто под язык. Поэтому да, неминуемо будут появляться инструменты в каждом языке, я думаю.
Давай немножко переключимся. Ты про бизнес заговорил. Действительно, все-таки тонкости языковые и так далее. А вот действительно с точки зрения старта новых проектов, фреймворк и еще что-то. Я, наверное, со своей стороны могу сказать, что люди не всегда осознают, много проектов написано, во-первых, на PHP и как много каких-то решений, all inclusive, что называется, тоже написано на PHP. Когда ты берешь там форум какой-то, какую-то систему оплаты, еще что-нибудь. И я очень часто с этим сталкиваюсь. Ты берешь...
Мой личный конкретный пример. Ты решил себе выбрать LMS для своего университета, колледжа или школы. Какие тебя есть варианты? У тебя варианты почти все PHP. И самое главное, что ты берешь Moodle, который... Ну ладно, него там проблемы есть, но они, скажем, к PHP не касаются. Это просто интерфейсные проблемы разные. Это LMS, которая стоит просто везде, во всем мире в России, где угодно, абсолютно ей пользуются.
(25:42.797)
И она написана на PHP, и она сертифицирована, и есть компании определенные плагины к ней пишут, и так далее, и так далее. И вот таких штук мы можем назвать, мне кажется, тобой миллиард. У тебя есть, ну, прям перечислить какие-то вещи, чтобы люди вот поняли, кто нас слушает, что PHP вообще-то ого-го вокруг нас? Ну, в «Контакте», да, там PHP частично уже теперь... — «Порнхаб» — Они уже ушли там частично. Я, не знал, «Порнхаб» на PHP написан?
Да, там даже когда на страницу заходишь, там прям расширение иногда видно. Чё ещё? Ну, кстати, это самый сильный, слушай, мне кажется, в принципе, этого ничего не надо называть. Да, про это написать и больше ничего не надо. Самый трафиковый сайт, в интернете. Ты же заходишь туда, Зрители нашего спрашивают. Да, зрители собрались. Слушай, это прикольно.
PHP BB был какой-то движок для форумов, я помню, или BB, или как-то... Слушай, их же вообще было полно, это целое Ну да, они были точно дофига, но вот это я как будто бы когда-то просто пытался поднять, не знаю зачем, я вот поэтому и забыл. да, для форумов, по-моему, все форумы были на PHP, честно говоря. Ну это было, да. Вот если сейчас, вот если сейчас мы посмотрим, я точно знаю, что есть многие продукты, которые ты вот... Просто мы как битубишники, ну смысле...
Хекслет там интегрирован с десятками просто сервисов, там, я не знаю, штук сто суммарно. Юкассы. Да, Авида. Я интегрируюсь. Я просто с ними... Я с Юкассой интегрируюсь, я делаю себе автоматизацию для своего курса. Все хочу, чтобы люди там сами себя оплачивали, мне рассылалась счета. Ну, у меня маленький просто очкурс, поэтому там многого не надо.
Вот, и я с ними интегрируюсь, и что-то я там где-то заметил, что у них PHP, я от кого-то слышал, и у них, собственно, SDK под PHP сделано. То есть ты вот, как бы, если ты по-хэпэшни, к тебе прям нативно с ними интегрироваться, очень приятно. Why Clients — это система, которая использует все барбершопы, вот с косметикой, связанная там с маникюром, педикюром, вот это все.
(28:03.693)
Это тоже всё на PHP, эту систему используют, ну вот мне кажется, вся Moscow. Я три раза переезжал. Крассирем, да, по сути. Да-да-да. Где ты можешь выбрать время себе, выбрать мастера и там оплатить, записаться и так далее. Вот. И я три раза менял место жительства, три раза менял барбершоп.
и везде white lines. есть я захожу, просто цвет другой, логотип другой, а это та же самая штука. Вот, я так понимаю, за диплоин и мобильное приложение тоже как бы instance другой, но это начинка 100 % та же самая. Вот, потом я даже познакомился с стихоредом, который там работает. Вот, так что да, бы PHP по-прежнему много всего. А насколько ты в курсе про, например, фреймворки, то есть использования? Потому что...
На PHP есть как минимум несколько очень мощных фреймворков. Это Symphony Laravel в первую очередь. Есть поменьше игроки. И они вообще-то очень активно развиваются. есть там нет такой истории, что они заброшены. Там фигарят только в путь. И у них очень-очень высокая популярность. Да. Я в Symphony очень тесно был интегрирован. Когда-то давно я Contribute'ил. Наверное, лет как раз 10-5 назад. Я...
был активным контридором, был топ-контридором. Но в команде Yidra Symphony я не был. Хотя был близок к тому, но я настолько не хотел форсаж включать, у меня не было такой задачи Так что они меня даже пригласили на hackathon в Брюссель, оплатили мне билет, проживание, всё, и вот там топ-контридор, и нас был человек, я не помню, 20 или 60 или 50.
Вот, короче, я вошел в этот список, и мы там просто в Брюсселе сидели в одном каворкинге, который сняли целиком под нас. Европейская какая-то комиссия спонсировала это мероприятие. Мы сидели кодили, решали задачи. Вот, я, конечно, офигел, что туда попал. Все были единственные русские, и была одна девушка с Украины. Вот мы вместе записывали с ней интервью с разными чуваками. Потом так вот родился мой канал «Пыха», и изначально я туда просто постил информацию с того мероприятия. Вот, и я активно контрибитил...
(30:14.445)
Прикольное общение, очень многому научился, они очень пекутся о diversity, таких вот вещах, которые присущи западу, но просто все равно токсичность может, независимо от этого появляться в сообществе, но в симфонии вот прям все очень приятные, добродушные. Я помню, в слэке там активно общался с ними, меня знали, там узнавали, было круто, потом выступал там в Амстердаме тоже на симфоний-кон. Короче, прям ну вот
супер классное сообщество. И симфоний в те времена был фреймворком, был низкоуровневой, то есть, знаешь, для таких типа прошаренных, кто готов красиво что-то сделать, но побольше сам. А потом, уже позже, они взяли за основу политику, что мы хотим догнать Ларавель и...
делать побольше фишек, которые ближе к людям, которые попроще, что ты взял, пару кнопок нажал, и у тебя уже что-то есть классное, ты этим пользуешься. Ну, из других фреймворков могу назвать Spiral, да, Антон Титов, это, собственно, изначально русский, он давно, в Сан-Франциско где-то.
дислоцируются и вот их компания она кучу делает проектов наверное для американского рынка на PHP на своем фреймворке которые они написали чтобы эти нужды закрыть и они же потом ногой сделали Roadrunner, сервер для неумирающего PHP они же сделали тесную интеграцию с Temporal на PHP с осинками там с генераторами и со всем прочим вот то есть скорее всего они тучу делают крупных платформ на PHP на своем фреймворке
Ну и куча, да, как сказал, игроков поменьше, всякий Cake PHP, есть Lamina сраншон был с End Framework'ом. Что там еще? Ну еще какие-то есть, я так не так часто какие-то новые фреймворки пробую. Но недавно был обзор от канала Fart PHP, и они там выкатили список того, они вот просто пошарили, поискали там, ну прям гигантских новых фреймворков, которые супер нормаленькие, пока неизвестные.
(32:20.525)
Но они появляются и появляются, я вообще с ума сошел с какой там количества было. Времени не было подробно смотреть. Так, просто, знаешь, воспоминания нахлынули, пока ты про это говоришь. Я был одним из активистов русско-украинского. Тогда просто на Украине было, наверное, очень много ребят-контребьюторов Zen Framework и вообще ребят очень активных по PHP.
и конференции, я даже ездил выступал в 2012 году, это моя первая конференция, которой я выступал, а стой, 2010 год, чё тебе говорю, это в 2010 году даже было. Это FVD, да, наверное, или как оно? Да-да-да. Вот мы очень тогда дружили с ребятами, это вообще просто шикарное время было, и сильные ребята внутри были, и вот знаешь, Zend Framework, же была такая одна из первых историй, мы раз...
с разработчиками общались пытались внедрять какие-то штуки но конечно уровень сам понимаешь тогда еще все это только начинала сезон конечно пытаясь быть таким супер мега монстром который решает универсально все задачи он конечно в итоге проиграл но это для меня был очень важный такой знаешь этап жизни и вот это погружение кстати очень многие разработчики ребята вот кто-то да особенно украине были они многие сейчас живут сам французский работают кстати они разработчики вот деска почти все стали
Вот, мы не сказали от desk же. Вообще, почти все платформы для фриланса, они написаны на PHP. Я думаю, что они до сих пор от desk также активно его используют и так далее. А вот если говорить вот прям про рынок, у тебя есть какое-то представление, ну типа количество вакансий, людей, которые там, не знаю, конференции, метапы, то есть ты видишь какие-то вот тут изменения? В России...
Ну, я, кстати, постоянно где-то выступаю, куда-то езжу. По России, естественно, последнее время, потому что я здесь живу. И был период, конечно, вот на спад все пошло, там ковид, плюс, понятно, все события. И PHP Russia, вот конференция, которую сделали, по-моему, в 2019 году, впервые она была, я тогда еще...
(34:34.296)
Особо в русском, да и в зарубежном. Ну тогда там просто в симфонисам обращался, в зарубежном чуть-чуть был известен, а в русском почти нет. Вот, но тогда вот прям PHP Russia, я помню, выстрелила нереально. То есть туда приехала из зарубежа, короче, куча чуваков. Тут же Рома приехал. Приехал Никита Попов, который тогда все фичи делал. Как раз там 7.4.8.0 PHP, всё это прям так активно. Вот, потом 2020 тоже неплохо прошло.
А, или это, наверное, был 18-й, это 19-й, вот. 20-м уже, по-моему, ничего не было. Я вот тут могу попутать какая хронология. Но потом еще была одна PHP-Rush прямо уже после начала военных действий, и там, ну, как бы, все туго было. Потом был пауза. И вот сейчас мы собираем... Я в программу-комитете. Будет PHP-Rush 2024.
И здесь у нас неполноценная конференция, это будет часть хайлоуда. Но и у ГО тоже часть будет хайлоуда. есть уже языки сейчас почему-то не набирают, по крайней мере в России, полноценную конфу, чтобы туда куча народу пришло. Вот, метапчики там организуют то там, то здесь. Но, наверное, был расцвет вот в 2019 году как раз до ковида. Прям куча была метап, потому что в PHP был очень...
движушный такой чувак, которого звали Алексей, забыл фамилию, он из Skyeng был. Skyeng на PHP, кстати, есть, наверное, на GO переходит частично, я не знаю, но они по-прежнему спонсируют какие-то вещи для PHP. вот он организовал, он просто ураган был, знаешь, вот такой человек, супер-организатор, он приезжал в каждый город, говорил, давайте делаем метап завтра.
Вот у меня есть тут спикер, там спикер, есть куча идей. И это просто все вот сообщество просто в каждом городе оно поднялось, воспряло. А потом он из-за каких-то разногласий с Кэнга ушел и как бы все подсдулось. Ну и плюс наложилось еще куча обстоятельств внешних. И в итоге сейчас я бы не сказал, что прям какая-то классная активность. Но я слежу за симфонией. У меня даже вот в вкладках тут есть симфонизначок. И я время от времени знаю, что ты заходишь в браузер.
(36:45.197)
привычки, и что-то надо кликнуть. Я еще с тех времен, хотя я сейчас прям за кодом симфонии сижу, но раньше я прям все новости смотрел, полреквесты сам делал, сам ревьюил, и так далее. И вот я иногда кликаю, и них постоянно ивенты у них был во время ковида были онлайн, потом обратно офлайн, и у них там постоянно Берлин, Вена, Лиссабон, там все, то есть ну, там вроде все хорошо с ивентами. Лара Кон, пожалуйста, недавно прошел.
И Ларавелл получил какое-то там нереальное финансирование, какую-то кучу бабок, я просто боюсь ошибиться, не па... И Тейлор, соответственно, с этим вот сертификатом там трясся на всех каналах подкаста, где можно и нельзя, вот, на как бы их развитие. Так что в целом все хорошо, с эвентами у нас тухловаты пока. Как-то так я вижу. Слушай, это интересно, то есть... Да. Да-да-да. А рынку ты спросил...
Я, к сожалению, не особо за этим сейчас слежу, потому что я не устраиваюсь, не нанимаю, трудно сказать. Я единственное помогал компании Evron собеседовать год назад людей. Вроде поток был, зарплата мне, как это была недавно статья на Хабре, вроде бы там не так все плохо, чуть поменьше, в Java, еще где-то.
А так вакансий-то, конечно, куча. то есть есть они. Не будет такого, что ты как на хаске или спишь, что добрежел, это, что мне с ним теперь делать? Вот, как бы, ну, только преподавать, наверное, академические какие-то типы лямбда куба и идти в какой-то университет. А в PHP, конечно, работу этого всегда найдешь.
Но у меня так и бухать не что он умрет. Линию профессионального взгляда на рынок нет. Кстати, на PHP Rush будет... В прошлый раз было, и этот раз будет от Кати Фирсовой. Я не знаю, это эксклюзивная информация нет, но, в общем, будет доклад классный про анализ рынка PHP. Ну, собственно, приходите на PHP Rush, я как член ПК немножко рекламирую. Там будет классный доклад с какими-то новостями на эту тему. Вот так.
(38:49.581)
Супер! Я тут прям ты в тему сказал, добавлю пару моментов. Первое, так получилось, что по PHP последний раз я выступал в 2010 году как раз в Киеве. С тех пор, как видишь, такой затяжной перерыв. Я много выступал, но по другим темам. И обычно не по языкам. И в этом году как раз, ты, знаешь, ко мне пришли ребята. То есть получилось, что мы написали на Ларавелли плюс инерции проект для колледжа.
Это именно, знаешь, приемка, когда документы надо принимать. Вот там такой навороченная история связана с состояниями, вот со всеми делами. То есть, такое, такая, ERP-образная система, там, и CRM и все на свете. Вот. И почему выбрали? Как раз именно вот по этой причине, что можно было бы легче найти там разработчиков, у тебя, например, нету конкуренции от BigTech'а. И, кстати, вот когда ты про зарплаты говорил, я как раз хотел про это сказать. Вот когда говорят, зарплаты...
Чуть меньше, это правда, но надо понимать о чем идет речь. Речь идет просто о том, что PHP как правило в бигтехе мало. А бигтех он прям отличается именно просто тем, что он бигтех. И в таком случае у тебя просто немножко есть вот это смещение, грубо говоря. То есть это не значит, что если вы профессиональный разработчик на PHP, вы получаете мало денег. Смысл в том, что шкала в целом сдвинута из-за того, что в бигтехе стартовые позиции выше, а PHP используется в огромном количестве нишевых штук, где у тебя компания на полтора человека.
Но я каждый раз говорю людям, когда они про это спрашивают, я говорю, вот вы просто возьмите и посмотрите вакансии в вашем городе, и вы увидите, что чем меньше город, тем скорее всего там больше PHP. И радостно изучив там какой-нибудь Python, вы вообще не факт, что там работу найдете, если этот город не специализируется. Просто есть такая фишка, ее не все знают, что в мелких городах у них есть реально как будто специализация по языкам, она связана как правило с градообразующими, давай так, в нашей индустрии, предприятиями. То есть вот...
Частый пример, это я привожу Казань, там есть, знаешь, акбар с группой, вот эти вот все штуки вокруг документа оборота, да, и это крупная компания, которая связана с госами, то есть они много государственных денег получают, они делают много классного софта, который, ты знаешь, не просто так Казань считается одной из лучших, вот в этом плане. Так вот они пишут на джанге и на пайтоне, поэтому если ты смотришь, у тебя в Казани какой-то дикий перекос в сторону пайтона, но в других городах у тебя совершенно другая картина, поэтому это очень важно смотреть, но при этом в общем и целом
(41:10.445)
Жизнь показывает, что чем меньше город, тем больше там именно... Ну, даже студии до сих пор существуют агентства. Не в таком виде уже, конечно, но это присутствует, Так вот, про... А! Да, добавь. Да-да-да, я про конференцию Добавить хочу пример тоже города. Я выступал на Яшкаролинском метапе не так давно. С женой летали. Прям, ну вот нас безумно круто встретили. Мы меня как спикеры, и мы вместе прошлись по их...
Короче, там компания IcePring, вот можно сказать, но она не градообразующая, она градо поддерживающая такая. И они провели вот Илья там, в частности, устроил экскурсию по школе, которую они построили, или там они её только строят, и универ у них есть. И везде нас, мы всё прошлись, потом сам мета был офиген у них в офисе, потом автопатием мы пошли, вот прям...
Вот знаешь, вот как бы я готов раз в неделю туда летать, придумывать темы, уже поднадоело там что-то готовить, метапы, но ради них готов. Потому что вот суперски встретили, прям им большой респект. И вот я понял, да, что там Icepring — вот такое предприятие, которое как раз у них даже детский сад есть в офисе для сотрудников, которые работают в этой компании.
И у них многое на PHP, но они вроде как это сейчас модно на Go что-то переписывают тоже, но долгое время, соответственно, PHP был их основным языком. И вот это как раз тоже пример недалеко от Казани, да, такого же истории. Да-да, мы... причем Сайд-Спринг, с разных сторон связан, да, потому что у нас свои колледжи, школы, поэтому мы и на них тоже смотрим, и у них такой больше... Они больше благотворительностью, честно говоря, занимаются.
И это, круто, что в Краснодаре есть свой человек, который стадионы строит. В Ежкороле действительно есть Принька, и основатель я ним сам не знаком, я смотрел его всякие выступления, невероятно крутые ребята, которые на весь мир торгуют и поддерживают свой город. Это очень круто. И действительно там PHP будет долго, много, это, скорее всего, никогда не уйдет. И более того, вообще...
(43:23.597)
Мы с тобой надеемся, что будет виток наоборот, когда все такие типа, нафига мы бежим, в PHP все прекрасно, можно с этим работать. Опять же, я думаю, что в конце концов просто стабилизируется. Сейчас еще этот хайп не закончился, но оно просто когда-то войдет в этот режим, и все будет плюс-минус на определенном уровне. А вот по поводу конференции, сказать, да, вот я не выступал, и так получилось, что именно в этом году ко мне пришли сразу аж с двух сторон. Мне пришли с PHP Russia,
И ко мне пришли вот ребята из подлодки, соответственно, подлодка онлайн, поэтому там с ними легко договорились, я буду выступать скоро. К моему студу я сейчас даже дату не скажу, надо будет написать. в понедельник выступаешь, а я во вторник. А, уже, Ты вечером в понедельник? Круто. Кстати, ты не поверишь, прям после... Вот как только мы тобой сейчас закончим наш разговор, меня будет этот прогон доклада.
Вот, а по PHPRussian буквально вот я списывался тоже недавно, там была история, знаешь про что, он же оффлайн и наверное доклад мой не возьмут, но в целом из того, что я два месяца, три месяца писал эту систему для колледжа, а меня же опыт большой в разных языках и в фреймворках, вообще моя специализация там, фреймворки изнутри, я сам их там много тоже писал и использовал и я очень много увидел, знаешь, косяков в Ларавелле.
И более того, не только косяков, но я посмотрел по Ишусам, там наткнулся, может быть ты видел статью там одну написал на Хаббор, по тому как мы продакшн базу потеряли из-за того как транкейт для пазгреса там реализован. А, да, заголовка. Ты может быть помнишь. Ну там чувак прям вот ровно в одном адаптере, то есть представь, во всех адаптерах у тебя транкейт просто работает, а в одном адаптере он написал каскейт. Ровно в одном. Очень логично, да? Логика. Вот. И как бы...
Ну ты не ожидаешь такого, когда ты ни одного фрейворка такого не ожидаешь. То обычно они все-таки прямолинейные. Ну написано Truncate, значит обычно Truncate. И я его просто засунул в миграцию, чтобы ты понимал почему, потому что проект микроскопический, там почти никого нет, это еще только-только запустились. Я такой думаю, ну мне просто лениво дропать базу. Я такой, ладно, сделаю так. То есть это ни на что не повлияло, опять же, падение этой базы, то что я выходные сидел, делал, я все это пофиксил. Но проблема в том, что я вдруг обнаруживаю, что меня база пустая почти вся.
(45:42.797)
потому что каскадом он просто всё удалил, я такой вот это весело, но меня больше всё расстроило именно поведение, скажем, именно фаундера, потому что когда я почитал Ишус, ну реально ему пишу, что это прям проблема, ну то есть это прям люди теряют, а он вместо этого начинает писать, что типа я не буду ломать обратную совместимость, при том что когда-то он сделал полуреквест, который собственно ввёл этот, понимаешь, каскад, и такой типа, странно, что это в одну сторону работает, а в другую, более безопасную, не работает.
Ну и так, я немножко пожаловался. Короче, меня действительно есть что сказать по Ларавелю. Ребята обещали прийти, маловероятно, что это произойдет в этот раз, но в целом, сразу тебе говорю, если куда-то надо прийти, у меня накоплено, и пока оно еще не выветрилось, я могу про это где-нибудь рассказать. Ну вот, про взаимодействие с Ларавелем. Здорово, Могу тебя на канал свой YouTube PHP-Point позвать, ну там, разберемся о чем-нибудь, поговорим.
По поводу Ларавелля там вообще вот я рассказывал как комфортно контрибютировать симфонии про Ларавелль я часто слышу сам не контрибютировал, но слышал что там как раз все не очень классно то есть там иногда токсично как-то иногда этот Тейлор закрывает тебе полреквест рядом, делает свой такой же и как бы от своего имени делает ну что-то такие истории какие-то были вот так что там есть проблемки с этим, да. Да-да. Представь, я как бы не в комьюнити, но я это сразу просто повышу и сам увидел потому что я прям вижу что
он там король и бог и в принципе это было бы нормально но там прям такое очень диспатичное управление идет и он все такие пишут ну пожалуйста сделай он такой нет я считаю что так не надо и все это блин ну большой контраст с кинфами да и кстати в конце концов да потом мы вот человек с которым я вместе это делал он мне сказал ну там программист наш парень наставник с хексл это вот мы с ним вдвоем это делали
мы в конце всё-таки поняли, что, блин, наверное, всё-таки было более правильно Symphony выбрать, потому что если раньше когда-то давно, как ты говорил, Symphony был скорее конструктор для тех, кто хочет конфигурить всё с нуля сам и очень не любит, знаешь, вот эту типичную историю, когда есть люди, которые говорят, framework меня ограничивать, дайте мне свободу. И Symphony, я так понял, судя по твоим словам, и тому, что я слышал, всё-таки сдвинулся от этого. То есть он по-прежнему компонентный, но при этом он позволяет сейчас довольно легко стартовать.
(48:05.709)
и без необходимости конфигурить там полудня, неделю, чтобы он заработал. Да, попроще, да. По поводу его сдерживания, тут что-то мне сразу в голову пришло, и по поводу твоего напарника мы с ним знакомы, потому что PHP-82, когда релизили, был Саша, я и он, наверное. Владлен, да. Владлен. По поводу... Ой, Владлен, подожди, сорри. Я прошу прощения. Я все время эти двои меня путаю, Владлен и Владлен, да, у меня есть два друга.
Вот, я поэтому, да. А я теперь сам задумался, он был, по-моему он был, а фамилию не помнишь? Ну, по поводу симфонии не ограничивает как вот. Я на самом деле уже вышел за рамки там того, что мне нравится симфонии, потому что, ну, когда ты начинаешь, ну, как бы дальше двигаться, что-то узнавать, ты уже в каких-то вещах, которые раньше ты с удовольствием, да, контребутил, ты начинаешь видеть.
косяки, там архитектурный, который может быть не влияет на юзабилити, но вот внутри ты уже не очень доволен. Но вот одна из крутейших вещей у симфонии компилируемый контейнер. У всяких Laravel там E и так далее, кстати, framework, который забыли назвать, E, E3 выйдет. Официальный релиз будет тоже на PHP Rush от Саши Макарова. Вот, и в симфоне, соответственно, компилируемый контейнер, и там есть такая штука, как Compiler Pass.
Это когда ты можешь в уже настроенный, готовый к дампингу в PHP-код контейнеру, ну как компиляции, да, ну компиляция здесь понятно в кавычках, вот, ты можешь внести изменения вообще в любое место этого контейнера. Это очень круто, потому что даже когда ты ставишь какой-то внешний бандал другого, какого-то, ну, через Composer что-то внешнее ставишь, ты даже там можешь подменить класс, можешь подменить декларацию сервиса.
Это супергибко, это дает тебе возможность даже какие-то баги временные, которые ты зарепортил у себя заход фиксить, потом это убрать. Ты можешь переконфигурировать все, что есть. Вот как бы одна, мне кажется, из гениальнейших вещей, это вот это, потому что это суперкрутая точка расширения. Она вот в симфоне для меня играет большую роль, много раз спасала.
(50:13.485)
Круто, когда такие какие-то решения есть, которые позволяют тебе, знаешь, самый последний момент все равно красиво внести изменения, не делая форк, не делая каких-то сложных телодвижений. Это так. Слушай, это прикольная вещь, которую хочется сказать, возможно, ты не совсем с этим знаком. Ты знаешь, когда я примерно с 10-го по 12-й год, меня был плавный переход на руби.
И одна из вещей, которая меня поразила в Ruby, вот ровно то, что ты рассказываешь, я вот с тех пор про Ruby рассказываю, я говорю, ребят, а вы знаете, что благодаря MankiPatching в Ruby вы можете про... это OpenClosed класса называется, когда ты можешь любой класс в любом месте, там, конечно, это реализовано прям, скажем так, дико со стороны других разработчиков, что ты в любом программе вместе пишешь класс и просто пишешь в нем любой код, и он как бы накладывается на предыдущий.
Но это максимально гибко, скажем, да, это прям вообще. Это как бы, как любое мощное оружие, тебя плюс и минус. Но вот ровно то, что ты рассказываешь, ты такой понимаешь, что когда у тебя есть возможность без форка, без всего этого просто внести, это манки-патчах называется, любой фикс, тебя это подкупает, конечно, просто безумно. Ты понимаешь, это, вот это, конечно, уровень, И то, что ты сейчас сказал, очень сильно откликается, и я такой думаю, блин.
Есть только маленькая проблема, что это требует некоторой дисциплины, потому что, вспоминая, знаешь, тоже самый L'Oreal, очень сильно напрягает там очень много вот этой magic define function. Я думаю, что вот эта штука так не заработает легко, да, вот из-за того, как они это сделали. А вот это мне стало интересно. Я знаю в Kotlin есть механизм extension, когда ты можешь для любого класса дописать что-то и подключить. Это похоже или там еще есть переопределение?
в Ruby это взял из Smalltalk, если я не ошибаюсь, то есть он пошел по его пути и если Kotlin, да, extension я знаю, я как раз вот после Ruby тоже немножко его смотрел, он позволяет тебе делать это, скажем так, лучше в плане чего, у тебя типа безопасность обеспечивается, у тебя как-то это более короче, ну давай так, для крупных проектов, где тебе важно, чтобы все было четко, это конечно гораздо более лучшее решение.
(52:26.317)
Но с точки зрения возможностей, то, что в это запредельный уровень свободы действий, потому что ты, наверное, слышал этот язык, ну, типа, рефлексия встроена в него прямо внутрь. Тебе не нужно там отдельными классами как там оборачивать, ты просто берешь в любой объект все, что хочешь делаешь вообще совсем. У тебя такого нет уровня свободы ни в Python, ни в JS с его прототипами. И ты просто в Ruby берешь любой класс.
встроенный, неважно откуда угодно, и просто переписываешь. Хочешь, переопределил, хочешь, перезаписал метод. Все, что хочешь, в любой момент. И поэтому, очень много патчей ты можешь накладывать, как бы не дожидаясь ничего, а потом постепенно их убирать. Из-за этого есть проблема. Кстати, я смешную штуку скажу, это не совсем про PHP, но это прикольно про это сказать. Ты знаешь, что люди в Ruby и в Rails есть такая прикольная штука, что люди путают иногда с чем они работают, с Ruby или с Rails?
И со стороны для людей не всегда понятно, как вообще это можно путать. У тебя есть язык, а есть фреймворк. А очень просто, потому что Rails за собой ведет такой компонент, который называется Active Support. Что такое Active Support? есть, они в ядро Ruby, потому что ты его легко можешь попатчить в любом месте, добавили сотни методов, сотни, прям в самое ядро, которые дают возможности, которые очень важны для именно веб-фреймворков.
И я тебе даже сам скажу, несмотря на то, что я в этом хорошо разбираюсь, копаю и так далее, ты когда пишешь на Rails, ты не всегда понимаешь, это ты сейчас пишешь на Rails или ты пишешь на Ruby, понимаешь? Это удивительная штука, А! Я когда работал с Димой Котировым, просто вдумайся в это, это еще было до того, как я на Ruby начал писать, это 2008 год. Угадай, нет, вру, это был 2010 год. Ты знаешь про RunKit проект? Это когда можно что-то в PHP вносить какие-то...
Это вот оно то же самое. Это проект, который делает PHP Ruby в каком-то смысле. И Котеров тогда во фреймворке, который мы использовали в том стартапе, он это реализовал. У него все было на синглатонах. Понятно дело, что так лучше не писать. Но понятно, что их нельзя попатчить нормально и подменить. Кстати, Zend из-за этого делал у них был GetInstance, и они сделали угадать, что SetInstance. То есть ты как бы мог. Но опять же, у тебя состояние, надо вернуть. Это рождает... Ну то есть это кошмар.
(54:44.717)
RunKit, знаешь, что позволял делать? RunKit позволял просто в тестах, то есть ты прав, просто в тестах говорил, что вот этот getInstance и как в Ruby, типа меняешь все, что хочешь. И вот мы таким образом тестировали, и тогда еще, представив до всего этого, я познакомился с этим инструментом. И потом как-то спустя много лет я зашел, думаю, интересно, какое у состояние. Знаешь, что удивился? Он живой. То есть его развивают, он живой. И, кстати, для каких-то вот таких штук для кого-то это вполне себе рабочая схема, если они как бы грамотно это используют.
Я знаю, что Лисаченко сделал Z-Engine, где тоже файнал можно убирать, еще что-то. И из PodC там что-то можешь делать, я прям не разбирался. Но аспектное программирование так можно тоже внедрить в PHP, потому что ты можешь тогда на любые вызовы вешать какие-то обработчики и так далее. Про Rangkit я только слышал, про Z-Engine чуть больше знаю. Похоже уровневые инструменты.
ранкит наверняка тоже как си extension да подключается вообще вот когда ты тогда же кстати а об был супер популярен и кучу лиф всяких использовали это то блин мы вообще этим жили тогда джав просто php пытался быть во всем похожим на джаву и он тащил все из нее и честно говоря это кстати я тоже считаю что это стало одной из проблем потому что
у тебя overengineering попер во все поля. И вот Symphony в том виде, в котором долгое время существовал, я уверен, что это отголоски всех тех вот подходов и системы, что давайте сделаем мега-конфигурацию. При том, что Java уже такая так стопе, давай делаем Spring Boot, убираем XML, убираем вообще всю эту конфигурацию, прячем все это за аннотации. А в PHP-то механизма такого не было. Хотя ты опять же не поверишь, я для Zend Framework писал собственную реализацию. То есть тогда было время написания собственных диаев.
То есть мы контейнеры писали сами. Мы выступали с докладами, как мы там всякие прокси делали, через всякие, знаешь, аннотации делали инъекции и так далее. Да. Капец вообще. Капец, я сейчас вспоминаю просто. Да, ну симфонии сейчас, когда атрибуты в PHP появились, вместо аннотации, то есть, ну, аннотации тоже был период, когда в PHP-докет просто делали, библиотека Doctrine Annotations, которая позволяла их рефлексить, парсить и так далее.
(57:01.101)
Сейчас у нас есть атрибуты, уже все нативно, и Symphony уже активно их там фигачит, и теперь можно все атрибутами размечать. Что еще связи с этим хотел сказать по поводу DI-контейнеров? Когда я студентом на курсе DI-контейнер, сначала есть, во-первых, Greg Young, который в Ensourcing придумал, и у него есть доклад замечательный, что-то там называется Seven Lines of Code или Nine Lines of Code. Очень классный доклад.
где он в том числе говорит, он же джовист, говорит, к черту dependency injection framework, вот, например, у нас есть них есть база event-storm-db, которая позволяет, event-source-db, которая позволяет, которая вообще как стримы выглядит, и ты можешь event-sourcing, ну не на кавке делать, там на...
этой базе данных, она написана на джаве, и он говорит, мы не используем контейнер внутри этого проекта, у нас просто есть в каком-то месте файл, котором просто всё, большая простыня, всё явно инстанциируется, инжектится и так далее. есть, если ты хочешь что-то подключить, то туда идёшь и подключаешь. И говорит, типа это явно круто, зато не надо учить никакие там эти конфиги сложные, нет вот этих атрибутов, он там тоже аннотации в джаве, он говорит, что типа annotation-based development это плохо там и так далее.
И мы на курсе с ребятами тоже начинаем с того, что такое dependency injection, dependency inversion, inversion of control, и я говорю давайте мы руками сначала напишем, у нас там несколько классов, давайте мы соберем руками, посмотрим, кем нас возникнут проблемы, почему нам нужна мебенизация потребуется, вопрос сразу синглтон, нам потребуется лейзилодинг, не грузился серый сенсор, не нужен.
И так далее, и так далее. Мы выходим, решаем эти все вопросы руками, без всяких symphony.di. А потом я говорю, если мы хотим модулей конфигурировать в разных местах, чтобы конфиг был устойчив к разделению, нам уже нужен какой-то контейнер, который умеет это делать. И давайте теперь же самое сделаем в symphony, и мы разбираемся, как это делать. Мы тоже этот путь проходим для понимания того, как di работает внутри, как он выстраивается.
(59:12.077)
И у меня, когда я... Я в целом, наверное, поклонник Symphony DI, его компилируемости и разных фиш, которые там придуманы, но из-за Legacy в нем есть много таких вещей, которые уже никак не поправишь. Например, у них нет четкого разделения, что ты глобально конфигурируешь, что ты локально для файла конфигурируешь. Там это так и неявная граница.
у них нет поддержки всяких крутых типов и стат анализаторов современных и у меня есть идея когда я еще миллион идей своих open source реализую а меня список там такой что наверное до конца жизни не хватит но я бы написал свой di-container компилируемый с учетом тех проблем которые я за много лет накопил пониманий там и так далее
Так что время написания контейнеров вернется через какое-то время, потому нужно будет переосмыслить. PHP сейчас активно упарывается во всякие типы строгие статонали, сженерики и прочее. И тогда хочется автовайринг делать так, чтобы он учитывал и ray-шейпы, и женерики, списки, массивы там всякие размеченные и так далее. И нужно будет написать новый уже инструмент, который это все решит.
Но это когда-то в будущем и даже не обещаю, если моя аудитория смотрит. Потом с меня не спрашивайте это. Мне это, кстати, знаешь, что напоминает? Это фоксический PHP пойдет по пути TypeScript, где у тебя сейчас все библиотеки переписывают все свои методы, сигнатуры, чтобы они работали с типами и, соответственно, добавляют типы прямо вот один в один. Но там прямо это идет настолько массово, то есть там уже настолько вот этот тренд пошел, потому что язык есть, да, что...
по-другому просто нельзя. Я уже сам даже смотрю, если вижу, что библиотека под тест уже не заточена, ну честно говоря, я уже не хочу использовать. Потому что это бесплатно. Если ты такое берешь, тебя просто из коробки куча фишек появляется, да, и это хорошо. Из-за этого, кстати, казалось бы, даже старые уверенные инструменты, которые там доминировали просто там десятилетиями, они начинают сдавать очень резко, потому что местами выясняют, что их просто невозможно адаптировать, слишком они там...
(01:01:15.181)
магические гибки и так далее, Там всякие вариативные аргументы, там чего только нет, всяких штук, которые не позволяют нормально делать. Да, это довольно интересно. Я знаешь, я понял ещё одна вещь, которую надо про PHP поговорить. Просто большинство вещей, которые мы сейчас тобой говорили, они всё-таки для людей, которые не из PHP, они нас тоже, скорее всего, слушают, они, конечно, сейчас, наверное, них уши-то за этот, завернулись, потому что о чём вообще эти люди разговаривают, да? Но есть вещь, которую можно поднять.
и просто поговорить про будущее ее. Я всегда про это говорю, кстати, меня был прикол. когда, представь, я трудоустроился на Ruby, это был Digital October, если ты знаешь, это Красный Октябрь, там Undef была компания, и Digital October это ее производство, производная была. Вот, и когда я туда трудоустраивался, там на собесе как раз мы общались про Rails и PHP, и там был прикол, когда я им объяснял, что PHP после каждого запроса умирает, они мне не поверили, они говорят, так не бывает.
И реально 20 минут я сидел, пока ребята ходили, спрашивали и гуглили. Потому что они мне не поверили. Я говорю, ну вот так работает. И потом Дима Котеров, если ты помнишь, он у себя на форуме, который у него популярный был, он же писал статью про то, что FastCGI, который типа в PHP ввели, на самом деле фейковый. Потому что тебя все равно как бы приложение, даже Bytecode, вот сейчас мы тоже про это пару слов поговорим.
у тебя всё равно нету настоящего типа в памяти весения, тебя как бы супер глобальные массивы никуда не делись и так далее. Вот я хотел бы про это в поводу поговорить, но сначала небольшая присказка для людей, что PHP единственный язык, наверное, по крайней мере из того, что используется широко, в котором у тебя каждый запрос встает, поднимается заново, у тебя нету памяти висящего приложения.
Сейчас опять же поговорим, что в памяти, то есть из-за этого им приходится делать мега оптимизации, которую даже в других языках не всегда делают и париться о таких вещах, которых языках никто не парится. То никто не парится, что Rails стартует минуту, никто не парится, что Java стартует час в некоторых приложениях. А в PHP нужно париться, например, том, чтобы даже конфиги разбирались с какой-то дикой скоростью, трансформировались в PHP файлы, которые потом еще кэшерами байт-кода съедались, да, и после этого у тебя в память это все вгружалось просто там в доли секунды.
(01:03:33.869)
И плюс PHP есть legacy с суперглобальными массивами, которые типа просчитывали... Ну то есть сама схема была рассчитана на то, что у тебя все живет ровно один раз. Вопрос. Произойдет ли что-то с этим? Или это вот legacy, с которым жить на всю свою жизнь, и все как бы уже привыкли, и все нормально, и всем надо просто тупо оптимизироваться по максимуму на первый старт? Во-первых, да, ты все классно назвал, так и есть, и вот даже, наверное, дико слышат про какой-то компилируемый контейнер, DI.
PHP, что компилируется? Это интерпретируемый язык, о чем вы? Идея в том, что у нас есть конфиги этого dependency injection контейнера, мы их пробегаем, собираем контейнер в коде, как бы генерируем, сохраняем его в папочку, и потом уже нас готовы из зависимости, которые ты вызвал, ну как бы все ты получил, на все собранное, потому что это все уже преобразовано в супер эффективный PHP код. Там даже есть интересный нюанс тоже, вот к дополнению, кто может перечислил.
В PHP же есть автолоудинг, это не как тебе компилируем язык, то тебя все классы подгрузились, там вся таблица есть одна, нет, мы так не можем, сделавшись мы подгрузим все классы, ну как бы у нас большая часть из них просто не нужна. Поэтому в Symfony.DI есть два режима его работы, ты можешь его скомпилировать так, что каждый сервис будет в отдельном файлике, и только когда тебе этот сервис потребовался из DI, то соответственно за автолоудились в этом...
файлики, те классы, которые в этом сервисе используются. Вот. И это хорошо подходит как раз для умирающей модели. Но поскольку сейчас я сейчас к этому перейду, стала популярна неумирающая модель, то ты можешь компилировать контейнер как один большой файл. И тогда ты его PHP считываешь, все подгружает, у тебя все это как бы готово. В PHP еще добавили preloading, может быть кто-то слышал это там.
7.4 или 8.0 PHP это когда эти классы можно заранее в webcache подгрузить и они уже в bytecode готовы к использованию короче это все к чему, что потихоньку мы уходим от умирающей модели и приходим к тому, что допустим как работает roadrunner. Roadrunner поднимает воркеры PHP процессы
(01:05:44.301)
в которых у нас фреймворк запускается и он остается жить и когда там не знаю round robin мы выбираем этот воркер у нас уже все готово для того чтобы просто обработать запрос также как это происходит в java и в других и этот roadrunner этот сервер написанный на го он поднимает несколько таких воркеров ты это конфигурируешь там не знаю два три десять вот ну и они соответственно
в нужный момент выбираются, но они независимы, они ничего между собой не шарят, никакого стейта, то есть это независимые процессы, в каждом из которых поднятый готов обработать фреймворк. Это существенно ускоряет. И без того, мы уже обсудили, что, PHP один из самых быстрых интерпретируемых языков, еще джит в нем, еще вот 8.4 будет новый джит от Димы Стогова, но там вроде производительность не улучшилась, но там улучшилась внутренняя его имплементация.
Во-вторых, нас весь код во всех фреймворках написан так, чтобы да, везде лейзи лоудинг, ничего мы сразу не подгружаем, вот только куда идешь, то мы только и подгружаем, все остальное как бы не попадает в память по возможности. И еще ты подключаешь, допустим, переходишь на Roadrunner, а сейчас так сделано в Symfony, что у тебя есть компонент, который абстрагирует запуск твоего фреймворка от ронтайма.
То есть смотри, вот ты сделал симфоний приложение, написал и ты допустим изначально использовал стандартный PHP, FPM, все как обычно, умирающая модель. Ты устанавливаешь другой runtime, для Roadrunner, который я сегодня много раз упоминал, меняешь одну переменную среды и у тебя ровно твой проект запускается через Roadrunner. Тебе ничего не нужно менять в коде.
Даже если тебя где-то подтекает по памяти, тебя где-то подвисает стейт в какой-то статике и так далее, Roadrunner, у него есть софт-лимит по памяти на каждый воркер. Если у тебя 120 мегабайт по валачанию, ты говоришь, что на 100 мегабайтах нужно уже завершить, он корректно этот воркер завершит, достанет новый из пулла и все. есть даже если тебя что-то течет, разберешься этим потом, логах ты это увидишь.
(01:07:44.205)
Поэтому мы потихоньку все двигаемся к тому, и на курсе мы тоже Roadrunner с первого дня используем, к тому, можно уже без умираний обойтись. И это неплохо работает, везде интегрировано уже, так что мы от этого... То есть ты хочешь сказать, что Roadrunner дошел до такого момента, что он реально может использоваться в продакшене, там, серьезные требования к... И PHP поддерживает прям хорошо,
Да, а там на самом деле от PHP вообще ничего не требуется, то есть это просто сервер на Go, который ты... ну, допустим, если с нуля с Roadrun'ом работать, тебе по сути нужно просто вызвать... там даже расширение нужно никакое использовать.
тебе нужно просто написать там вот этот фронт контроллер определенным образом, так чтобы он принимал по стандартной, есть PSR стандарт для сообщений, вот этот PSR request и PSR response вернул, а Roadrunner сам за тебя все это сделает и в продакшене это используется довольно давно, несколько лет уже, вот я компания в последний, который работал, нет, предпоследний, Happy Ink, я там 4 года проработал, мы на Roadrunner там перешли, это был 2000, не знаю.
21 или 22 год, но у нас не супер нагруженный проект, но я знаю несколько компаний, где все нагружено и там работает сервера. Все это уже давно и Roadrunner вышел недавно, у них версионирование, знаешь, сменилось, когда год используется, поэтому теперь непонятно, но грубо говоря, него уже мажорный лист, там 4 или 3 был или 5, я точно не скажу, но это уже супер стабильная вещь, которая можно считать, что стандарт отраслевой, в каком смысле.
Но есть альтернативы его. Ну, Swool — это просто такая история, где вообще всё на Async рассчитано. Это как бы отдельный такой мир в PHP, где прям нужно расширение ставить, Async и Wait поедется и так далее. Но это как бы сложно. Это для тех, кто готов в этом упоросся. А вот такие сера, как Franking, PHP более новый и Roadrunner, который 100 лет существует, это без проблем. Воткнул и погнал и всё. То есть там Config в Ямле, там указанное количество воркеров, там...
(01:09:49.129)
порт, это все, там он и со статикой умеет работать, но обычный NGNX все равно перед ним встает, потому что это как бы... Ну, тут без вариантов, да? Да, да, вот, и все. И у тебя ускорение, вот ты представишь, у тебя было приложение, ты поменял runtime, поставил одну библиотечку, поменял одну переменную среды, и у тебя было там на запрос, не знаю, там 40 мс, осталось там 4, 5, ну 10, ладно, ну там зависит это, понятно, от наполнения запроса этого.
Вот, ну то есть прирост прям может быть существенный, просто что все, вот все весь фреймворк, весь стейт, который ты поднял, он переиспользуется. Ну как бы все, пожалуйста, как и в Java и прочих друзьев. Ну, кстати, если это станет реально массой, прям стабильной, то тогда получается, в принципе, можно выдохнуть PHP community, перестать заниматься мега оптимизациями своих фреймворков и заняться просто именно фичами. Потому что сейчас, есть необходимая сложность и случайная. Вот PHP...
продолжает бороться со случайной сложностью, думая об оптимизациях там, где остальные забили и в это время делают как бы крутые фичи. А PHP такие, оспаде, плюс там, не знаю, 100 килобайт в память нельзя, что же делать, как же не парсить эти файлы, что же еще придумать, там просто микро оптимизации на левые и на правые, вот эти вот готовые файлики. Но, кстати, чтобы это не выглядело как только минусы, все-таки у PHP из-за этого есть определенные преимущества, которых нет у других. И это иногда спасает.
я просто хочу об этом сказать. Значит, два. Первое. Всем остальным приходится встраивать механизм сброса состояния. То есть, потому что когда ты жмякаешь F5, ты не увидишь, что произошло, если этого фреймворк не встроено. Это, не то что большая проблема сейчас, потому что это везде встроено, но надо об этом думать. Ладно, есть такое. А вот второе, это уже существенно, что благодаря тому, что PHP полностью выгружается из памяти, PHP вообще-то жрет очень мало ресурсов. То есть, типа...
если вы запустите сайты например у вас стоит задача запустить 100 мелких сайтов на java и запустить 100 мелких сайтов на php на php вы это пихаете просто на любую этот vps и у вас работает на java вы берете выделенный сервак иначе у вас просто это все не старта не вот то есть помнишь эту историю когда у тебя на одной в пске там на 512 мегабайт памяти ты можешь там не знаю 500 сайтов разместить 700 сайтов я могу конечно обманывать сейчас по цифрам
(01:12:08.973)
но там реально это были безумные цифры числа и до сих пор хостинги наверное как бы они все PHP ориентированы вот именно прям хостинги хостинги да да можно было да ну вообще пока можно было не думать об этом действительно в то время как я помню вот еще только в это все погружался какой-то я тогда у папы подрабатывал еще вот в универе начал работать и там чувак
как раз про Джаву говорит, что она памяти жрет, и он что-то перенастраивал и ругался, я это очень хорошо запомнил. Такая проблема всегда есть. Смотри, я еще ты вовремя затронул PSR, почему? Потому что это PHP в основном, как ты говоришь, роль догоняющих.
Но в PHP есть несколько интересных вещей, которые у них получилось сделать, а у остальных не получилось. Для тех, кто не знает, PSR — это типа стандарты разнообразные, там начинают логеры ошибок, заканчивая там HTTP с общениями, как Middleware там организовывать, там много всяких стандартов. И я вот что хочу сказать. Меня очень поразило, когда я вот это увидел, когда это поперло. Почему? Потому что подобного вообще-то в большинстве языков нет. И из-за этого вообще-то они страдают.
например, если мы берем Ruby, там просто повезло, что был единый некий Rack, если кто знает, на базе которого делались все фреймворки, поэтому он как бы де-факто стал стандартом, и там типа Rack совместимое приложение, ну, особых споров нет, хотя стандарта как такового нет, можно и по-другому делать, просто это безумие, тебя application server тупо не запустится, он совместимый именно с этой штукой. В ноде это, например, проблема, потому что у тебя есть Express, Middleware,
у тебя есть там другие фреймворки, они все несовместимые, тебя вот любой новый фреймворк с экспресс-миддлварами почти несовместим, а это значит, что у тебя либо просто так не переиспользуешь, и уж про подмену каких-то элементов там даже говорить не приходится. В Java была попытка Java Enterprise Edition, она провалилась, и поэтому там тоже, кто влез, кто под рова, там... Каждая экосистема, своя, она мощная, но каждая своя. И PHP светится среди всего этого.
(01:14:26.925)
потому что это единственный язык, на мой взгляд, я может не прав, может быть в ГО так, я просто в ГО не сильно знаю, но у которого получилось создать эти интерфейсы, которые реально работают, и ты реально берешь любой фреймворк, правильно я тебя понимаю, ты можешь подменить там роутинг, вообще почти все подменяется, и при этом никто не испытывает состояния, типа аля, мы тут Enterprise пишем, это все достаточно легко друг с другом дружит. Так ли это или не так?
Там не все гладко, естественно было, например, есть такой знаменитый кейс, что в PHP два стандарта для кэширования. Сначала был стандарт PSR6, там был слишком сложный интерфейс кэша. есть у тебя есть не один, казалось бы, но вот сделан этот один интерфейс, там get, set, delete и так далее. А там был репозиторий кэша и item кэша. То есть как, знаешь, у как вот прям в ORM становится.
И на айтоме ты можешь уже сделать... То есть ты сначала из этого репозитора забираешь через метод get, а на айтоме ты можешь положить значение, можешь поменять TTL и так далее, и так далее. И еще там был сразу встроен механизм что-то отложенного вот этого комита этих айт... Короче, очень сложно, come on. И в итоге сделали потом PSR16. Ну, да, вот это стандартный мемас про стандарты. там уже все...
проще, там в итоге методов 6-7, потому что там есть setMultiple, getMultiple, delete, но в основном, да, там три метода и все просто один интерфейс и плюс интерфейс для исключений. Вот как бы не очень гладко там прошло, кто-то сначала усложнил, потом упростил и теперь все должны поддерживать два, но вот это как всегда, как теперь быть? Есть адаптеры с одного на другое, ну в общем вся вот классика дальше, которая развивается.
А потом, значит, еще какая с этими стандартами проблема была, что PHP-фиг, организация, которая их форсировала, организовывала, находила людей, они все это обсуждали, голосовали и так далее, а у нее слоган, он даже сейчас есть, там что-то PHP Framework Interoperability Group, он по-моему фиг, так и по этому называется. Framework Interoperability Group, да, вот я аббревиатуру расшифровал.
(01:16:41.485)
И задача была уже к тому моменту, был Ravel Symphony, Zend 2 или Laminas, не знаю, организовать какой-то взаимозаменяюц, доктрин крупный проект, УРМ, Debult и прочее. Но в итоге они стали делать просто стандарты хорошие, с пониманием того, как это, наверное, должно быть. И поэтому родился вот этот Http-стандарт, где тебя имутабельные сообщения должны быть имутабельными. То есть у тебя with методы, получаешь новый instance.
Поэтому тебя идет request, него with URL, with query string, with path и так далее, это with схема и так далее.
И тоже самый респонс. И потом появился, значит, Request Handler, него Middle Warrior. Всё это красиво, круто, но не про Interoperability, да, взаимозаменяемость, это там ни о чём, потому что на тот момент в симфоне Request мутабельный, Респонс мутабельный. Вообще, симфоний построен не на идее Middle Warrior, а на идее Wind Listener, а это совершенно другая концепция. Как бы вроде об одном и том же, но не тривиально. Одно из другого, вот мы даже делали, у была Олимпиадная задачка на канале.
как адаптер в одну сторону легко сделать, в обратную непросто, потому что тебе нужно прервать поток выполнения, и решение состоялось в том, чтобы использовать файберы для этого. То есть адаптер на тот момент вообще нереально был написать из одного в другое. И симфони как бы обиделись и вышли из этого PHP-фиг в какой-то момент, показав фигу, потому что они сказали, ну что это за interoperability, если мы не можем это имплементировать.
без потери обратного совместимости и без поддержки всего того, что мы так долго развивали и делали. Ну и соответственно они там какие-то стандарты имплементируют, какие-то не имплементируют, они еще свои сделали, но это точно бред, потому что никто... Когда ты ставишь интерфейс, в котором в пакете есть слово symphony, ну это как-то плохо уже работает, но все равно, да,
(01:18:38.733)
все равно прикольно, что ты можешь поставить интерфейс и сам его там задекорировать, написать декоратор под него, что-то имплементировать как-то и так далее. Но в итоге, если так, спустя годы посмотреть на компонент симфонии, этот как раз runtime, который я сказал, посмотреть на ларавеле octane, по-моему так это называется, аналогичная штука в ларавеле, мы понимаем, что эти PSR стандарты позволили теперь нам взять и действительно серверу.
приложение менять так что приложение не меняется вообще ну вот стандартный dependency inversion principle во всей красе на уровне фреймворка все прекрасно замечательно вот так что как бы были проблемы стандарты там эти ругали даже вот есть известный чувак в PHP русском сообществе Кирилл Несмеянов может быть слышал он скоро будет делать доклад там в Питере как раз там
Почему PSR говно? что, типа, ну как он любит просто так вот сформулировать, я не помню как бы это называться. Вот, ну потому что недостатки, очевидно, есть. Но это сработало, да, то есть есть плюсы минусы, но по итогу гораздо лучше, они есть, чем их нету. Хотя некоторые решения там спорные, да. Кстати, именно Кирилл ко мне, по-моему, пришел с этим... А, да. ...с выступлением. Да, так что мы с ним вот познакомились как раз. А там еще так смешно было, он пришел ко мне...
он перепутал. Там другой доклад, вот как раз мой коллега будет делать на тему Ларавелли и инерции, но там именно про инерцию скорее больше, что как использовать. А он думал, что я его делаю. Он говорит, ну что, когда будем прогоняться? Я же вроде прогнал доклад, а я думал про другой доклад, который я делаю, перепутал еще конференции. Короче, поржали немножко, Слушай, ну в любом случае, то есть для тех, кто вот на ноде пишет...
опять же, видишь, если ты в рамках одной экосистемы, просто может не задумываться, люди могут об этом не задумываться, есть они такие видят, ну вот, наверное, это и есть жизнь. А когда ты видишь разные экосистемы, это прикольно, на самом деле, наблюдать, потому что где-то умирает, где-то получается, где-то вот как в ноде есть проблемы с этими фреймворками, и все просто пытаются какие-то писать реально адаптеры. То есть существует такая штука, Express же, помнишь, да, вот Express, он в реальности, не развивается уже черт знает сколько лет.
(01:20:52.397)
При этом, да, конечно, его как-то подпинывают и до сих пор в головах у многих что экспресс, хотя, кстати, вот он, ну, он по сути вот в этом плане не актуален, потому что там Fastify сейчас уже все развил с уже до каких-то сумасшедших величин, и мы его везде используем, все там хорошо, и вокруг него все строится, но до сих пор есть очень много либо legacy-проектов, либо legacy вот этих вот middle-bark.
и прям есть специальные типа штуки, которые вот экспрессовские мидалвары конвертируют там в твои мидалвары и так далее. Вот примерно так все и живут. И поэтому я не слышал, может быть там есть такие попытки, но я вот не слышал про попытки, знаешь, попытаться что-то этим сделать. Может уже поздно. Ну и плюс, наверное, не так критично. Все-таки в PHP, видишь, у тебя там то, что рассказывал, там вообще разные системы были. Здесь все-таки все вокруг мидалвар строится просто чуть-чуть по-разному. Так что это гораздо проще соединить, по крайней мере.
Да, но в итоге сейчас в Middleware даже есть библиотеки, которые просто предоставляют Middleware совместимую с PSR, там забыл номер. И всё, ты её ставишь и в любом фреймворке используешь, это, конечно, песня. Ну и в итоге со временем, вот я сказал, когда был критический момент, там симфония вышла, ещё кто-то вышел, там несколько игроков вышло. Вот, но в итоге...
Вот всё-таки да, вот круто, что ты это затронул тему. Я понимаю, что несмотря на все сложности, видимо типичность, которыми столкнулся PHP-фиг, и что все вышли и оскандалились и так далее, но по итогу, да, плюсов куча, потому что ты берёшь любой фрейм, потому что все новые фреймворки, которые сейчас народ изобретает, или такие, которые, не знаю, там, пять лет назад и раньше начались.
они все уже на PSR-е, поэтому они все Interoperable стали без проблем. Symphony, да. Но для Symphony написали пару адаптеров, и ты можешь все равно эти Middleware подключать, и все будет нормально. И так или иначе, на текущий момент мы имеем Profit, и вообще отдельные библиотечки могут решать свою Single Responsibility. Маленькую Middleware там написал, зарелизил, ее могут использовать вообще все. Любой фреймворк, ну плюс-минус. Это здорово, действительно.
(01:22:55.021)
Да, это прикольная вещь. Давай, вот последний такой момент, который мы разберём с тобой. всё-таки будущее, да? Ты вначале вот говорил, что всё-таки есть куча там желания всякого внедрять. И то, что касается в том числе статической типизации, да? Потому что, ну как ни крути, сейчас это тренд новый, повторный. Уже какой раз всё это знаешь, такими витками идёт. Расскажи, пожалуйста, что здесь происходит, в какую сторону двигаются, какие изменения планируются в языке и потом в будущем. Короче, как вы захватите мир?
Да, статическая типизация вообще в мою жизнь вошла так постепенно. Я-то ну вот как пхпшник, абсолютно я стандартный пхпшник для аудитории твоей. Я буду типичным представителем, поэтому для меня какие-то вещи позже доходят, я о них узнаю постепенно, там в них как-то влюбляюсь, их переживаю, вот, ну и потом использую потихоньку.
Вот, и в PHP, естественно, это всё с запозданием тоже, Но в какой-то момент появились эти статунизаторы, по сути, два основных, Sound, PHP, Stan, которые развивались-срозвивались и стали популярны. Причём оба там, да, ну сейчас у них разная линия развития, один там подзагибается, но это неважно. И добавили тот статическую типизацию, потому что все PHP-шники встретились со стандартной проблемой. Мы хотим отлавливать кучу ошибок, не...
написавая кучу тестов и до того как код попадает в продакшн поэтому нам нужна строгая типизнация. Зависло. Чё-то со связью. Я сейчас вижу что соединение как бы то разорвалось.
(01:24:38.893)
Соединение разрывалось, сейчас, по-моему, восстановилось. Да, давай. И, соответственно, решили добавить PHP изначально с динамической типизации. У нас есть приведения типов всякие неявные, хитрые, странные, которые сейчас депрекетят и PHP в целом. Потом добавили эту директиву declare strict types, когда тебя часть этих приведений типов выключается и так далее, и так далее. Соответственно, статический анализатор это выводит на новый уровень.
Ты можешь писать в комментариях типы, использовать генерики, условные типы, можешь описывать массивы вплоть до каждого элемента, вложенные генерики, ковариантность, контр-вариантность, инвариантность и так далее. добавили проекции типов. Это call site variants, когда ты можешь на месте указать, ты конкретный генерик будешь использовать, в каком режиме.
и так далее и так далее. Все это очень круто развивается. это вот как раз на проекте, про который рассказывал, котором четыре года работал, я это внедрил с первого дня. Там еще у статунезаторов ты можешь разный уровень включить, да, супер строгого до очень слабого и потом расти. Ну и соответственно я статунезатором уже давно пользуюсь и в PHP это становится тоже каким-то вот стандартом, что
все-таки желательно в проекте типы описывать и в CIC обязательно запускать анализатор, тогда ты больше уверен в своих рефакторингах, в своих изменениях. Ну, все стандартная история про строгую типизацию. При этом, конечно же, появляется тогда спрос на то, чтобы в PHP появились женерики. У нас их нет, да, они уж тут и в Go даже появились, и они в Python есть, стираемые, еще где-то есть, ну и не говоря уже о компилируемых языках.
Но в PHP с этим проблема, ввиду его природы, интерпретируемости и так далее. Есть три варианта внедрения генериков. Это мономорфизация, реификация и стираемые генерики. Вот. С мономорфизацией проблема с памятью, потому что это ты делаешь кучу классов, которых уже подставлены типы, но и это все надо подгружать в память, а мы уже обсудили, что это не путь PHP.
(01:26:47.309)
С реификацией это очень сложный рефакторинг всей кодовой базы и там ну может быть это получится, но нужно очень много усилий приложить. А стираемые дженерики у них есть проблема. Ну во-первых, что у тебя часть кода будет, с дженериками часть нет и там вот эти приведения типа в PHP тоже не понятно где и как будут работать. Плюс соответственно ты должен как бы обязать людей использовать статанализатор, то есть ты как бы пишешь дженерик, который по факту вообще никак не проверяются.
и ты это выносишь на плечи внешнего инструмента. Ну и в итоге, что мы по итогу получаем, что в PHP вот недавно было большой прям статья, где прям вот этот PHP Foundation полностью разобрал еще раз все варианты, какие есть, все оценил, пришел к выводу, что пока вот ну не понятно как сделать в PHP, но по итогу мы все равно имеем стираемые генерики, которые мы просто пишем в комментариях. То есть ну в итоге один путь, он есть и он работает.
есть предложение просто стандартизировать то как это пишется в комментариях оно в принципе более менее консистентно между разными анализаторами но может отличаться стандарт бы это исправил вот а дальше то чем я занимаюсь я сделал проект typhoon пошел смотри ты у тебя стираемый тип и у тебя есть дженерики есть куча вообще много всего литералы и прочие штуки
А дальше ты хочешь писать рантаимовые инструменты, которые эту информацию используют. То есть вот ты делаешь гидрацию там какого-то джессона в какой-то объект. Естественно ты хочешь, чтобы все это многообразие типов оно проверилось на твои границы входов в приложение. И для того чтобы нормально писать инструмент, который поддерживает, тебе нужна рефлексия, которая поддерживает эти типы. Вот, а в PHP рефлексия, понятно, она работает только с тем, что PHP знает.
Вот, ну и, собственно, озадачились, написали такой рефлексии. Я вот создал проект Typhoon, добавил туда людей, которые в этом заинтересованы, и мы вот уже 0.4 версия вышла, которая с этим работает. Вот, и дальше у нас еще разные крутые планы есть, но в том числе написать такие, этот гидратор, может быть DependC Injection Container, как я сказал, и так далее, и так далее.
(01:28:55.469)
И в этом плане будущее PHP состоит, наверное, пока в том, что все-таки будет развиваться направлением статумнизаторов. Хочется вывести это на какой-то паритет с TypeScript, потому что, знаешь, когда ты уже попробовал типы, ты начинаешь видеть места, где ты не можешь что-то типизировать, ты идешь в TypeScript, а там так можно. Или идешь там, ну в Haskell ты вряд ли идешь, но идешь в какие-то вот Java... Ну в Java хотя бы.
Ну, не, да, все, что в джаве у нас есть уже. Нет, вот дальше, как там язык называется, вылезти с головы. Вот. Ну, короче, вот в такие истории. И ты хочешь добавить. Ну, в TypeScript'е там есть несколько прикольных вещей, которые не хватает. Соответственно, как бы я сейчас из опенсорсного, я этим больше занимаюсь, этим горю. У меня есть в команде ребята, которые очень круто знают другие языки. Они там мне подсказывают тут так, там так, и мы...
разные вещи интересные планированы, но пока не буду рассказывать, что не факт, мы на них решимся, то, что мы придумали, вот, черт знает, не буду обнадеживать. Вот так что вот один из сценариев развития, да. Кстати, в этом плане, мне кажется, еще подлянку добавляет отсутствие разделения на массивы и словари, да, потому что я с этим, вот, когда после расписал...
в очередной раз от этого плевался, думаешь, блин, ну всё-таки не надо было так делать. Да. Но при том, что массив дико оптимизирует, мне кажется, вот как на уровне C, как это сделано, как после, особенно в PHP7 это дико там оптимизируют, оно красиво, прикольно. Вот если у тебя, как данность, понимаешь, что он сделал такую хрень, которая single responsibility 10 раз нарушает, то вот дальше, как оно сделано, это очень круто.
Но как пользователь, как бы да, понимаешь, вроде бы удобно, конечно, что у массив на всё, но когда ты начинаешь какой-то уровень познания достигаешь, ты понимаешь, что то, что есть хэшмап и список, и двусвязанный список там, и вектор, и так далее, оно круче, потому что ты в момент выбираешь эффективную реализацию, ты понимаешь, какие операции тебе будут сомкеть, но в итоге ты как бы максимум выжимаешь, выжимаешь за счёт, что есть конкретное понимание, что ты здесь используешь.
(01:31:15.949)
а в PHP у тебя массив на всё про всё, вот, и да, это проблема, но с точки зрения антипизации единственное ограничение то, что массив в качестве ключа может использовать только строки и числа, пока, там есть идеи вроде как объекта туда добавить, вот, но мы в Typhoon сделали свои data structures, которые позволяют любой тип в качестве ключа использовать, ну оно там плюс-минус эффективно работает, ну, насколько это можно в PHP.
Так что с точки зрения типизации в PHP довольно много всего можно сделать, классно вписать, с какой-то спецификой, но я бы не сказал, что это язык, который сопротивляется типизации. Но действительно очень забавно, феномен, что в PHP тоже пришли к строго эстатической типизации. Ну да, давайте мы будем в эту сторону двигаться.
Да, это все одновременно пошло. Конечно, TypeScript поддал жару, потому что то же самое в Ruby происходит. Правда, видишь, несмотря на то, что меня проект на Ruby, я на нем сейчас почти не пишу, поэтому не очень знаю, насколько там реально получается это внедрять, но там-то еще сложнее. Из-за вот этой мегаметамагии вселенной, там, конечно, я не представляю, как они решают все эти проблемы. Ну, TypeScript тоже, в общем-то, пришлось решать много всяких проблем, которые...
джесс накинул, так сказать ему. Но прикольно, знаешь, то, что PHP и джесс вот стараются разными способами уходить от слабой типизации, потому что это, конечно, кошмар. Плохая идея со всех сторон. Как показала жизнь, слабой типизации нет ни одного плюса. Ни в одном языке. Поэтому... Ну ты знаешь, один момент я вот забыл тоже, чей это... Какой-то был подкаст с каким-то чуваком, я потом тебе скину в личку видео, где...
парень рассуждает про то, чтобы мы вот в типах все описали, мы должны решить там все эти вот уравнения. Ну, если в математическую плоскость переходить, это конечная все равно история. То есть каждый раз мы можем суперсложные типы, да, вот мы абстодженерики, потом там дальше идут вот по лямбда кубу, вот все эти вершины, где мы там, я добавляю, я сейчас, я плохо уже дальше знаю, если я говорю, после лямбда 2 я там плохо ориентируюсь, но не суть.
(01:33:27.693)
мы все равно, это все будет конечно, а он там говорит, что есть такие задачи, которых, ну, как бы, вот эта строгостатическая типизация, ну, все равно, она не сможет их описать. Я сейчас плохо очень сформулировал эту концепцию, но можно видео посмотреть, то есть к тому, что...
Мы всегда будем опираться, когда будем строгать пизиртик, решая все более-более сложные задачи просто на уровне типов, не запуская саму программу. Мы всегда будем достигать потолка, будем расширять и так далее. Но как бы есть якобы какие-то супер сложные задачи, которые вот при отсутствии типов мы можем тогда их выразить. Но я, напарол чушь, это даже можно вырезать, а может быть, можно добавить ссылку на оригинальное видео, чтобы было понятно, грамотно человеку о чем там идет речь.
Глобально-то все просто. тебя простые задачи, многие с типами становятся сложнее, когда ты как бы логически у тебя должно сойтись, а автоматически это не выведешь. тебя даже банальная задача с написанием сервисов, которых тебя рандомные JSON-чики могут приходить с рандомными полями всем остальным, превращается в проблемку. Пойди напиши. Знаешь, простейшая программа. нас, в проектах, мы кстати столкнулись с этой проблемой,
Сейчас я скажу, у нас в обучении там есть такой второй проект, нам надо написать программу, которую диффы считают между джейсонами, ямлами и так далее. Она прикольна тем, что она там много отрабатывает, знаешь, алгоритмических штук и так далее. Она достаточно простая и достаточно прикольная. Ну и как ты думаешь, как только ты в джау попадаешь, у тебя сразу... То есть люди еще, в общем, только учатся программировать, а у тебя уже тут динамически поперли джейсоны, и поэтому нам пришлось там придумывать ограничения на типы и все остальное, чтобы людям там не пришлось...
творить прям совсем дичь. А в PHP каком-нибудь там... Ну ладно, кстати, даже в PHP проблемы из-за ассоциативного массива проклятого бывают. А вот идеально, конечно, это какой-нибудь Python, JavaScript, Ruby. Там вообще просто решается задача. Мне кажется, ты очень правильный пример привел, который вот то, что я пытался объяснить абстрактно, он про это говорит, что... И просто это задача, но вот если еще ее как-то усложнить, то вероятно, что в типах ее там будет ну прям совсем нетреально.
(01:35:43.181)
выразить или знаешь, вот я после PHP иногда открываешь код какого-то хорошо типизированного языка, но где явно нужно все писать. Что вот, например, открываешь Haskell, там типов-то нет нигде, они все же по вот этому Миллеру Шмиллеру выводятся сами, ты можешь почти никогда их не указывать. Вот это вообще, кстати, классная штука, потому что сейчас что получается, что ты пишешь на Котлине, и вот я даже там коллекциями интересовался и читал документацию.
и у тебя иногда в глазах хребет. У тебя там T, V, запятая там X, и потом это все T от V от X, и ты только и читаешь эту хрена тень про то, как тип в тип через тип, и ты не можешь толком понять, то есть это уже для мозга трудно. Вот, и в PHP тоже самое получается, потому что мы теперь PHP-доки, ну во всех сигнатурах пишем, и они начинают сложными быть.
И вот интересно было бы вот по этому алгоритму кого-то там Миллера или Милнера, я вот забыл, который позволяет типа не писать часть типов, они просто выводятся из анализа. Вот такое бы для PHP было бы клёво сделать, такой анализатор. Вот, но мы как бы фантазируем в этом направлении, но я не знаю, насколько это получится всё. По-моему, Хинди Миллера или на Хинди, да, да, Хинди Миллера, да. Там...
Есть ещё проблема в этой штуке, потому что я, например, в JS иногда, когда мне надо JS писать, использую тоже типы в JS-доке. Это, конечно, боль гигантская, потому что там куча ограничений. например, импортов нету нормальных, там нету нормального рефакторинга, там нету, например, хинтов, которые вот в современных... Знаешь, вот прикол, когда... Я помню, такая смешная вещь была, когда джависты не принимали var. Они до сих пор многие не принимают. Типа вот я тип не вижу с var.
оказалось, что ларчик-то просто открывается, то есть, современные редакторы тебе просто этот тип показывают, хотя его не написан, и получается, что проблема вообще-то решается машиной, и тебе можно писать меньше кода. И вот в этом плане мне тоже очень нравится, потому что даже вот когда ты про хаскель говоришь, несмотря на то, что в определении функций, например, можно не писать часто, там, тип выводится, но есть просто некое соглашение такое здравомысленное для всех, при определении ты всегда указываешь типы, ну а в некоторых языках ты просто не можешь этого не указать, да?
(01:37:59.405)
А вот уже на использовании в идеале, конечно, в большинстве мест, что оно само. Ну а где надо подправить, ну взял, пошел, подправил. Ну да, понятно, что на границах ты должен все уточнить, чтобы не было многозначности. Да, там вот, допустим, ты пишешь классы уже в приватных каких-то методах, вот там вообще ничего не хочется писать, что это все должно выводиться само, тривиальным образом.
Да, но честно, когда вот я TypeScript недавно писал, и когда начинаешь свои абстракции пилить, боже мой, там местами, конечно, вообще мозг просто с ума сходит. Наверное, если ты постоянно в этом можешь, но до какого-то все-таки уровня потом, конечно, сложновато становится. Но прикольно. Короче, понятно, куда мы все движемся примерно, и что в PHP, в принципе, фичи-то какие-то появляются, и там сейчас уже destructuring есть, и много чего есть, да, но в целом, наверное, из глобального это все-таки...
это вот движение в сторону типов, остальное, ну фичи и фичи, да, там добавить посмотрим. Ну и к типам обычно прилагается эта история про pattern matching, уже есть RFC, причем там какой-то мудренный, большой, с кучей там идеи и одновременно деструктуриза, ну вот как все оно там в красивых языках бывает.
Так что какие-то сопутствующие типы вещам, даже несмотря на то, что нет в PHP части этих типов, равно дополняются и какие-то идеи из других языков подтягиваются. В целом интересно наблюдать за этим. В PHP всё ещё не скучно. Когда там, наверное, классический вопрос, почему я не ушёл из PHP, вроде чем-то тут интересуешь, что-то знаю чуть-чуть, но...
Ну как бы оно, что-то происходит, плюс есть сообщество неплохое, движушное, прикольное и в итоге комфортно, ну типа в этом есть интерес, какой-то вайп, можно законтребить. Ну короче все вот эти потребности. А ведь там, ну на каком языке бы ты не писал, если ты плохо пишешь, ты будешь на любом писать плохо. Если ты шаришь, то ты и тут найдешь, что какие задачи порешать такие, чтобы было красиво. И наоборот, да, творчество в ограничениях, когда тебе говорят, вот сделай все, что захочешь.
(01:40:04.781)
Ты получишься полное дерьмо. Когда у тебя есть констрейнты, когда у тебя есть рамки, вот тогда ты включаешь мозг и что-то красивое получается, потому что в ограничениях искусство. В PHP это такая обратная сторона медали того, что вроде всё плохо, а вроде интересно. Мы можем сказать, что получаешь настоящее инженерное решение, которое решает задачу именно так, как её нужно решить в условиях этих ограничений.
Слушай, Валентин, тебе огромное спасибо, что пришел. Мы так интенсивно поболтали, что я вообще не заметил, как пролетело время. Ребят, кто нас слушает, обязательно напишите, что вы про это думаете. Мы не пытались вас убедить, но интересно, побудили ли мы в вас желание или, скажем, веру хотя бы в то, что с PHP все будет отлично, и он также мощно двигается вперед, и скорее всего, кстати, будет быстрее.
потому что видно, что все-таки новые подходы принимаются в какой-то момент, они примутся, и тогда, возможно, будет какое-то прям совсем второе дыхание и виток, да, и выход этой истории. Вот. А так, мы увидимся на... Пересечемся с тобой где-то там на конференции как-то. Вот. И запишем свое имя туда. Чего-нибудь хорошего скажем ребятам. Спасибо большое, что позвал. Очень интересно было, реально поговорили очень разнообразно, многогранно.
Это круто, поговорили про разные языки, и для тех, кто нас смотрит, знайте, что всё больше появляются статьи про то, как я писал три года на C-sharp или пять лет. Вернулся на PHP, мне клёво присоединять к этим людям. Вот, мы в PHP всех ждём с распростёртыми руками и новыми фичами в PHP 8.4. Круто. Спасибо, всем пока.