суббота, 20 октября 2012 г.

Кортежи и списки в PHP


В будущем развитии языка, наличие типов список и кортеж значительно повысило бы его эффективность. Сейчас роль списка играет индексированный массив, где в качестве индекса используются числа. Есть семейство функций array_ и ряд других, прозрачно работающее с массивами с числовой индексацией. Можно закрыть глаза на наличие числовых индексов и тогда массив превращается в список. Это создает избыточность и двусмысленность. Особенно это проявляется в операциях по слиянию массивов. Тут выбор невелик: array_merge. В случае пары массивов и более с уникальными ассоциативными ключами, возможна арифметическая операция сложения массивов. Это очень неудобно. Для того, чтобы целенаправленно сложить два массива [1, 2, 3] + [1, 2, 4, 3] == [1, 2, 3, 1, 2, 4, 3] нужно выполнить ряд нетривиальных манипуляций. Введение типа «список» решило бы эти проблемы. Тоже самое относится к кортежам. Данные типы можно было-бы обозначать так: prefix[1, 2, 3] где prefix=!@$... или так: {1, 2, 3} {{1, 2, 3}} :1, 2, 3: или так: [@ 1, 2, 3] или как в лиспе: (`1 2 3). Еще варианты: [=12,3,4], :[1, 2, 3], @$[1, 2, 3], [1, 2, 3]\\list \\list[1, 2, 3]
Ну в общем это тема для отдельной дискуссии.

В настоящий момент частичное решение этой проблемы возможно лишь через SplFixedArray. Данное нововведение, позволило бы упростить ряд операций и реализовать планируемые генераторы более гибкими. А также создать фундамент для реализации в PHP паттерн-матчинга.

суббота, 18 августа 2012 г.

PHP IDE? Eclipse? Yes... , but Emacs!

почти все работает с небольшими допиливаниями напильником и надфилем.
Только нужен емакс 24. Все есть. Особенно мне нравится в новом емаксе пакетные менеджеры: свой встроенный и el-get

Ставил все практически из этих пакетных менеджеров. Кроме окружения pear2 (pyrus + Codesniffer) и кое-что из пакетов генту для емакса и джавы-скрипт (nodejs для jslint)

скриншот:



мой конфиг в емаксе:
pastebin

для адаптации сразу надо порешать корректную установку el-get с зависимостями. Сначала стремно и неудобно, но потом с лихвой окупается.

keywords:
emacs, emacs24, php, ide, nodejs, jslint, codesniffer, screenshot, eclipse, el-get, gentoo, install, emacs.d, config, .emacs, dot-emacs, pear, pear2, pyrus, sample, example, pastebin

суббота, 21 июля 2012 г.

Autoload, APC, Стабилизация PHP-5.4

Ведущий мантейнер dev-lang/php пишет php-5-4-about-to-be-stabilised в своем блоге о стабилизации в дереве портов пакета версии PHP-5.4.
Одна из причин, почему это не происходит: задержки в выходе «кэшера» APC для PHP-5.4, довольно востребованного расширения. Расширение еще не стабилизировано для этой версии PHP и неизвестно хотя-бы приблизительно, когда будет релиз. Пока автор рекомендует пользоваться XCache. Примерно такая-же ситуация с наборами патчей безопасности Suhosin

На мой взгляд, APC действительно востребован. Фактически это хорошая opensource-замена многим продуктам zend.com, zend guard, zend encoder, ioncube и им подобных. На страничке данного расширения можно видеть, что последние версии вышли довольно недавно, но в статусе бетты. Последний стабильный релиз был в середине мая 2011 года. Среди разработчиков расширения, можно заметить Расмуса и других хорошо известных личностей. Это обнадеживает, что скоро стабилизация APC произойдет. Просто разработчики скорее всего были заняты доводкой PHP-5.4 весь период 2011-2012 гг.
Причем судя по коммитам в http://svn.php.net/viewvc/pecl/apc/trunk/ (странно однако, почему они сидят на древнем svn-не, а не на git-е), Расмус ведет самое активное участие в доводке APC. Читайте статью Расмуса про кеширование и ускорение php-приложений и вообще http://talks.php.net/show/w2e09

APC и другие «кэшеры» не решают архитектурные проблемы приложения. Для ускорения работы php-приложений без APC можно использовать следующий подход (паттерн). Первый оператор Вашего приложения это include 'autoload.php' в index.php. В autoload.php Вы объявляете лучше статичный класс примерно так


Еще одно немаловажно правило. Теперь все запросы на поиск файла в котором содержится искомый класс, будут приходить сначала сюда... Поэтому рекомендуется убрать везде, где можно в проекте include*, require* и добавить все классы проекта, которые планируется использовать. Несколько классов содержащихся в одном файле нужно добавить явно, как будто они находятся в разных файлах.

Данный пример подходит для небольших проектов и библиотек с небольшим числом классов. Для более удобного применения, необходимо добавить метод что-то типа Autoload::provideClasses(...)

PHP, gentoo, portage, tree, blog, APC, Xcache, production, dev-lang/php, Suhosin, PHP-5.4., 5.4, 5.3+, patch, security, development, stable, stabilisation, пакет, стабилизация, безопасность, cache, кэш, ebuild, extension, pecl, расширение, class, autoload, spl, spl_autoload_register, debug, namespace, path, include, require, example, solution, performance, Rasmus, pattern, zend, encode, ioncube, zend guard, alternative, encoder, code




четверг, 12 июля 2012 г.

Начальные материалы про PHP 5.5


Появились первые спецификации и обсуждения PHP 5.5 в статусе предложений.

Кратко:
Насчет generators очень заманчиво, хотя это из-за сильного влияния в мире python и всеобщего движения в сторону функционального программирования... Но пока в PHP не появятся классические списки и кортежи, реализация генераторов может быть неудобной или запутанной.
Не хватит скобок банально ;) Сделают списки, обострится проблема типизации и дискуссии типа зачем кортежи??? В общем деликатная тема...
Однако, подробности:
http://news.ycombinator.com/item?id=4234117
http://nikic.github.com/2012/07/10/What-PHP-5-5-might-look-like.html
https://wiki.php.net/rfc/propertygetsetsyntax-as-implemented

Как всегда есть здравые идеи, но и заумных хватает: на то оно и rfc

Лично для меня, очень удобными, сейчас, в 54 выглядят пока: traits, замыкания с контекстами this, короткий синтаксис массивов, LSB, php-fpm, (new Foo)->bar()[0];




АХТУНГ!


Разработка и развитие генту всегда на высоте, не стоят на месте и сопровождаемые пакеты php.

Я к тому, что ряд статей (примерно до 2011 г.) в этом блоге устарели и могут быть полезны только в познавательных целях или для очень давно не обновляемых серверов с генту.

Сейчас 53 достаточно стабилен и установка достаточно тривиальна.

Смотрите руководства по установке/обновлению php на сайте gentoo.org (ссылки на документацию есть в этом блоге)

Статьи на сайтах gentoo-wiki также выглядят устаревшими. Лично мое мнение: надо использовать в полный рост PHP 5.4 и готовиться к PHP 5.5+



среда, 4 апреля 2012 г.

PHP, PDT, Eclipse, Line delimiters, solution


Это небольшая заметка для тех, кто кроме емакса или другого нехилого любимого редактора иногда или постоянно использует замечательную IDE eclipse + PDT + Linux для разработки приложений на php.

Где-то в недавнем времени начала 2012 года, после обновления эклипсы стали внезапно, ненавязчиво и как говорят «тихо и незаметно» добавляться «завершители строк» в формате Windows. Да, причем настолько незаметно, что только потом, в «коммитах» гита можно заметить, что что-то не-так. Я решил, что это забавный глюк. Но не тут-то было. Все манипуляции и пере-установки были тщетны. Только спасала ручная конвертация. И вот сегодня это уже достало настолько, что я случайно нашел решение на stackoverflow, опубликованное каким-то добрым человеком. Респект авторам!

По данной ссылке читаем решение проблемы

Кратко передаю шаги решения проблемы:
PHP > Editor > Typing > When pasting adjust indentation

Удачи


суббота, 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