Есть ли техническая киллер-фича у PHP?
Публичный постНикогда не занимался PHP разработкой, имел дело с PHP только в конце нулевых, когда язык был на совсем другой стадии развития (и я тоже).
И вот намедни понадобилось написать пару скриптов именно на PHP, я что-то там быстренько состряпал, но суть не в этом.
Лирическое отступление
Есть ли что-то вроде гайда "PHP для опытных разработчиков Java/.NET/Python/etc"?
Если кто-то знает, напишите, было бы интересно.
Я начал рефлексировать на тему того, почему до сих пор так массово используют PHP, откровенно не лучший язык, у которого не было изначального "гранд дизайна", и который развивался как снежный ком.
Мне удалось выделить три основных плюса PHP:
- Большая кодовая база, написаны решения для большинства задач
- Большое количество и невысокая стоимость посредственных разработчиков на рынке (с хорошими разработчиками всё плохо и дорого, как и везде)
- Наличие PHP на любом хостинге за доллар
Я заметил, что все эти плюсы являются экономическими, а не техническими, т.е не касаются производительности языка, среды выполнения, удобства работы с разными СУБД, синтаксического сахара и т.д.
Отсюда вопрос к PHP-боярам - какие плюсы я упустил, и есть ли у современного PHP какая-нибудь чисто техническая киллер фича, заметно отличающая его в лучшую сторону от других технологий бэкенда?
Есть, и это отсутствие необходимости рестартовать сервер при изменении файлов для подхватывания изменений.
Мало кто задумывается об этом, но это невероятно влияет на продуктивность. Когда ты поменял файл и он у тебя работает сразу без ничего то это невероятно ускоряет процесс работы. Ты как в репле, только без репла.
В java тебе нужно пересобирать проект (если не использовать тулзы типа хаченной jvm или JRebel). В python нужно рестартовать сервер и это может занимать минуты! Даже фронтенд уже скурвился и требует несколько секундной (а то и больше!) компиляции и сборки вебпаком! В PHP тебе ничего не нужно. Ты просто пишешь код и жмешь F5 в браузере.
То же самое с Rails.
Среди программистов никто не понимает важности скорости подхватывания изменений, а тот, кто работает на PHP/Rails не подозревает, что весь остальной мир страдает.
Я даже статью об этом написал.
Каждую переменную начинаешь со знака долор. Успешный успех неизбежен.
Похапе в последнее время движется в сторону этакой интерпретируемой джавы. В вебе основной конкурент - python, и пыха его уделывает по причине высокой скорости (кто бы мог подумать лет 10 назад) и какой-никакой типизации. Коммьюнити в последнее время порядочно очистилось: хипстеры, макаки и вкатывальщики свалили на golang, и начали появляться нормальные инструменты. Например, Infection - один из немногих в мире нормально работающих фреймворков для мутационного тестирования. Psalm по сути превращает пыху в этакий тайпскрипт с контролем чистоты и мутабельности.
Выше писали про выгоды от ограниченности файла - это постепенно отмирает, на дворе 2020, все в микросервисах и на асинхронных (да-да, с генераторами появилась и асинхронность) фреймворках (swoole, amphp). Вообще в основном похапе ругают те, кто за ним не следит и отвалились где-то в районе выхода 7.0; кто на нем работает - затаили дыхание, потому что сейчас что-то вроде момента истины: или феникс восстанет из пепла возрожденным за несколько лет, или оCOBOLится окончательно. Развитие сейчас идет очень быстро, но и проблем очень много.
Попробую побыть адвокатом дьявола.
Киллер-фича (ну она как меч - обоюдоострая, то есть номально несоглашаться с тем, что она отличает прям-таки заметно в лучшую сторону), что в PHP-проекте каждый файл максимально обособлен, выполняется отдельным процессом, имеет своё окружение и т.п. То есть PHP-проект, простите за сравнение, как пачка лябмда-функций в AWS
Это позволяет:
Конечно, прямо сегодня эти "киллер-фичи" не перевешивают минусов PHP, потому его применение для индустриальной и энтерпрайзной разаботки ну если не невозможна, то очень-очень затруднена. Особенно очевидным это стало в последние лет 5 на фоне распространения PaaS для других языков программирования (Python, Ruby те же), облаков, крутого тулинга и появления .NET Core, Go, и Node.js у каждого из которых есть сильные киллер-фичи.
PHP остаётся в нише для малого бизнеса, где важен экономический контекст прежде все (множество опен-сорс проектов и библиотек, множество фрилансеров по доступным ценам, хостинг по доллару - вот всё что вы перечислили). Это пожалуй реальная киллер-фича, но не для разработчиков вот только :)
А про телеграмм что скажете тогда? Да, там не php, а kphp, но все-же?)
Генераторы
У PHP есть приятная штука, которая так зовется.
Использовал правда один раз в жизни, мне надо было парсить очень жирный файлик и приводить его к другому формату - генератор спас мне огромное количество оперативки :)
Грубый пример
Пример без генератора:
Пример с генератором:
Пример без генератора должен съесть в районе 33521784 байт, а с генератором - около нуля, а то и вообще обойтись без дополнительных аллокаций.
Почитать можно туть
Ну там про память что-то например. Что на каждый запрос запускается все и умирает тоже все, от этого понятное состояние и отсутствие утечек, не нужно какой-то сложной дрочи с перезапуском процессов, типа pm2
--тупить=)?
😱 Комментарий удален его автором...
Сейчас вот задумался: если говорить именно про сам язык, то привлекает возможность явно переключаться между строгой и нестрогой типизацией в процесе разработки. Чаще всего нужна строгая, но в редких случаях, когда нужна нестрогая - это делается очень эффективно.
Самая интересная фича современного PHP - это скорость его развития. При этом все подобные языки начинали примерно в одинаковое время, но остальные в целом как-то стабильны с виду. Даже самый молодой Go наступил на собственные грабли, заявив, что они максимально просты и сейчас добавлять туда фичи и глупо и не по канонам, хотя и очень хочется. А в PHP говна в конюшнях еще не на один год расчистки хватит, делая всем "хорошо".