суббота, 24 декабря 2011 г.

PHP 5.4 приближается

В то время, как народ начал потихоньку переезжать на 5.3, незаметно приблизился новый PHP 5.4

Что радует, так это наличие в дереве портов этой версии, возможно hard-masked.

Можно успокоить себя мыслью о том, что 5.3 была переходной версией, вносящая кардинальные перемены и это давало нам шанс перестроить свою архитектуру в правильное русло. Это отчасти так, но те кто остается на ветке 5.2, надеясь, что 5.4 или 6, 7 будет круче и тогда они честно перейдут сразу в новый мир пушистых зверьков, вероятно находятся в некотором заблуждении.

5.3 был сделан как раз для того, чтобы можно было с минимальными потерями перебраться на новые версии, потому как дальше терпеть эту архитектуру нет никаких сил. Ход конем оправдан в некоторых ситуациях, но мы имеем дело в основном с эволюционированием плавными итерациями. И цена которую придется заплатить более поздним переходом будет высока.

Среди кардинальных проблем перехода на новые версии PHP являются:


  •  бардак подключаемых модулей через include-hell (читайте тут: http://talks.php.net/show/w2e09 )
  • возврат значений по ссылке
  • строгий контроль ошибок
  • глобальные имена
  • пространство имен
  • консервативность пакетных систем дистрибутивов
  • тонны быдло-кода и вместе с быдло-фреймворками не готовые к переходу на 5.3+
  • ущербность некоторых ключевых архитектурных решений в самом движке PHP
  • pear-hell
Фреймворки успевшие попасть в стрим 5.3 симфони2 и зенд, типо3 провели фундаментальную работу по переходу на 5.3 и это им в большей степени удалось. Однако это привело к некоторым в корне неверным решениям и попыткой привнести и сохранить старую идеологию в новые версии, но тем не менее качество решений остается на приемлемом уровне. Мне лично не нравится очень большой уровень вложенности каталогов, эмулирующих пространство имен.

Задаваясь вопросом о характерных признаках правильно 5.3-арзитектуры можно отметить следующие:
  • 99% использование splautoload
  • 99% использование итераторов
  • активное применение "замыкание" closure 
  • spl
  • активное применение непрерывного цикла интеграции и разработки в купе с юнит-тестами и гитом, влкючая подъем рабочих юнит тестов одним "пинкомy" как говорится "заводится с пол-оборота"

Что делать?
Ответ прост: думать, рефакторить, думать, читать, изучать, придумывать и кодить. Основная проблема это определение приоритетов. Нужно строить систему таким образом, в первую очередь реализуя то,без чего система бессмысленна. Это как правило функционал. Остальное приложится.

Итак что нового в 5.4?

Много нового в общем.

В настоящий момент: traits (типа примеси) , встроенный веб-сервер, значительные удобства работы с массивами типа в стиле jquery, замыкания в классах и улучшенный контекст их работы и что-то там еще.
http://jburrows.wordpress.com/2011/12/17/what-to-look-for-in-php-5-4-0/

миграция с 5.3 на 5.4: http://php.net/manual/en/migration54.php (документ в разработке)


что хотелось бы видеть в новом php?
побольше функциональщины
некоторые возможности, приближающиеся к erlang
tuples, lists
"прозрачный" интерфейс взаимодействия с расширениями и их разработка
удобство интеграции в дистрибутивы

у меня накопилось множество ссылок по материалам php, php53

http://www.delicious.com/dancecodes/php
http://www.delicious.com/dancecodes/php53
http://www.delicious.com/dancecodes/php54