Сегодня был неприятно удивлен тем, что для определения пространств имен в php выбран обратный слеш – “\”.

Вечером узнал о этом на хабре. Если честно, сначала даже не поверил, подумал – шуткуют ребята. Ан нет, все на полном серьезе – читаем письмо в php-internals. Тем кто хочет ознакомится с “аргументацией” (именно так, в кавычках) вперед на вики.

Вообще мои сомнения в целесобразности использования обратного слеша заключаются в следующем:

  1. Аргумент о том, что большинство разработчиков php работают под Wins, а так как там обратный слеш используется для разделения каталогов, такой подход этим самым разработчикам даже понравится – бред полнейший. Я сам, большую часть работы делаю под виндами, но всегда считал использование обратного слеша нелогичным, благо Windows позволяют использовать просто слеш, как это принято в нормальных системах. Почему мне кажется это нелогичным? Смотри пункт 2.
  2. Обратный слеш – для эскейп-последовательностей. Точка. Все остальное от лукавого. В большинстве языков, если их дизайнеры не курят траву перед тем как надизайнить ченить этакое, используют бэкслеш именно так. И PHP не является (или не являлся?) исключением.
  3. Разработчики отказались от использования почти канонического “::”, в числе многих, по следующей (тупой) причине: мол, невозможно будет различить вызываешь ли ты метод определенного класса с использованием неймспейса, или вызываешь статический метод. Но ведь это просто дурость! Вполне себе возможно – при совпадении имен выкидывай achtung! и нет никаких проблем. Я вообще не совсем понимаю, почему такой язык как C# считает достаточной защитой такие вот ворнинги, а PHP дизайнеры нет?
  4. Бэкслеш просто коряво выглядит. Я не согласен с теми, кто говорит, что решение юзать именно этот символ соответствует духу PHP, и что это еще один аргумент для перехода на “руби питона”. PHP неидеален (а какой язык идеален?), но со своими задачами справляется, и справляется по большей части элегантно. В общем, бэкслеш режет глаз и портит настроение :( Каждому свое, конечно, но не думаю что я в этом выводе одинок.
  5. Рассматривал сравнительную таблицу возможных токенов, и не догнал почему бэкслеш считается лучше существующих парных двоеточий “::” по таким параметрам как:
  • typo-vulnerability (how easy is it to make a typo and get an unwanted behavior without a error/warning)
    что в вольном переводе читается как: насколько легко, прыгая на клаве задницей, допустить опечатку в символе-разделителе, с тем чтобы парсер чесал репу вместо истошного ACHTUNG!!
    т.е. если я вставлю знак плюса вместо токена-разделителя, то в случае когда разделителем является бэкслеш, ворнинг легче генерить? Хоть кто-нибудь пал жертвой использования плюса (или любого другого неверного символа) при использование статических методов?? Ну, хоть один? Если руки кривые, то правильный разделитель не спасет. Если руки растут из правильного места, то по мне, этот пункт – просто бред.
  • parse-ability (how easy is it to read the code and figure out whats going on without getting confused with similar syntax that means another thing).
    Опять же, вольный перевод: насколько проще читать код (и парсеру тоже) и не сидеть, удивленно вперив глаза в небо, бормоча: доколе/шо за..??
    Не уверен на счет парсера (хотя был о нем хорошего мнения), но я, думается, не буду удивленно пялится и думать..млин, это статический метод или вызов метода/функции из неймспейса. Семантически их разделить легко, тот же Zend Studio, справится, и при нажатии на имя метода можно будет глянуть где это и про что. А большее для чего? Или из-за того что метод статический, что-то страшное произойдет? В большинстве своем, из контекста кода все понятно, массовых auto de fe C# програмеров не наблюдается, так ведь?
  • number of chars – то бишь “многа букаф”. Ошалеть, нет реально. Т.е. вскорости ждать убийства статичных методов, вызовов методов класса (в -> тоже многа букаф!!). Потом можно $this заменить на $t. Я даже боюсь подумать, что произойдет, когда дизайнеры PHP в следующий раз раскурятся – видимо, просто уберут $ из имен переменных, куда как больше символов сэкономить можно! И это один из пяти критериев выбора корявого ситаксиса? В общем – бред.

В целом, мне кажется, что когда вы меняете что-то настолько кардинальное, следует дать много больше аргументации и ответов на вопрос: а зачем? Не надо впаривать что новое удобнее (вполне возможно так оно и есть), нужно сначала определить почему старое не работает. Если PHP и дальше будет развиваться (в данном случае развитие не приравнивается к прогрессу), нам, видимо, стоит ждать новых откровений..

В день когда бэкслеш будет залит в stable release, скажу PHP – it was a nice trip, but enough is enough. Идиотские решения от дизайнеров языка – это моветон. Это не дело вкуса, это инновация ради инновации – есть проверенные методы (или неймспейсов до PHP никто не использовал?), отходить от них нужно либо а) когда у тебя своя уникальная концепция, которая никак не вписывается в мейнстрим (это не про пхп – язык вполне себе мейнстримовый, почти все вторично и перетащенно из других языков) б) когда проверенные методы имеют, кроме достоинств, слишком много недостатков в) когда в голове закипает смола, и на мотивацию не заморачиваешься.

Еще по теме: здесь и здесь.

  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Reddit
  • Technorati
  • email
  • Print
  • DZone
  • eKudos
  • LinkedIn
  • StumbleUpon
  • Tumblr
  • Twitter
, ,
Trackback

2 comments untill now

  1. [...] предыдущем посте, кроме прочего, я говорил о том, что, перед тем как [...]

  2. [...] это лучший пост про идиотское непродуманное решение дизайнеров [...]

Add your comment now