Новое в блогах


Техноблог HTTPS и Amiro.CMS  1
Техноблог Обновление цен в каталоге интернет-магазина через CSV-файл 
Техноблог Подключаем и используем модуль «SEO Шаблоны»  1
Техноблог Использование модуля «Валюты» в интернет-магазине импортных товаров 
Личный опыт История от «Интер Электрик», #ОбновлениеЗаРассказ 
Личный опыт История от АвтоТехЦентр Субару Медведково, #ОбновлениеЗаРассказ 

Теги



Как умер PHP6

Микро некролог.
Юнико́д (англ. Unicode) — стандарт кодирования символов, позволяющий представить знаки практически всех письменных языков.

Одновременно с появлением всемирной паутины, появилась необходимость создания единой всемирной кодировки, где каждому существующему символу был бы присвоен свой уникальный код. Такой кодировкой стал Юникод. К настоящему моменту Юникод покрывает все основные действующие языки мира и включает в себя коды около ста девяти тысяч символов.

Являясь одним из самых распространенных в мире серверных языков программирования, PHP до сих пор не имеет полноценной поддержки Юникода.

В феврале 2005 года, когда о PHP5 многие разработчики знали только по слухам, а термин AJAX еще даже не был придуман, штатный сотрудник компании Yahoo, а по совместительству один из соавторов ядра PHP, отец-основатель амбициозного проекта PHP-GTK, всемирно известного шаблонизатора Smarty, и просто большой любитель пенного напитка, Андрей Змиевский, вместе с небольшой группой единомышленников из Yahoo, Zend и сообщества разработчиков PHP, стартуют новый проект, основной целью которого, являлось внедрение в PHP нативной и тотальной поддержки Юникода на всех уровнях: ядром, расширениями, программным интерфейсом.

Будучи сотрудниками весьма солидных IT компаний и трепетно относящимися к своему делу специалистами, эти ребята решили все делать по-уму:

  • - проектирование до кодирования;
  • - итеративная разработка;
  • - полностью нативный код, без костылей, хаков и т.п;
  • - полное покрытие кода тестами.

В качестве основы данного решения была выбрана библиотека International Components for Unicode (ICU) http://site.icu-project.org/, на данный момент являющейся самой полной и самой функциональной кроссплатформенной библиотекой в своей области. Как видно из названия, кроме задач связанных непосредственно с обработкой данных в формате Юникод, эта библиотека так же решает задачи связанные с вопросами интернационализации: нормализация, сортировка, работа с денежными и временными форматами, транслитеризация и IDN. Кроме того, разработка ICU жестко контролируется консорциумом менеджеров компаний Google, IBM и Apple.

Изначально работа велась в отдельном репозитории, но как только был закончен базовый функционал, код был перенесен в основную ветку разработки 5.X, и к работе над новой версией PHP присоединились остальные члены сообщества разработчиков. Кроме поддержки Юникода, в ветку начал добавляться новый функционал.

Очень скоро стало понятно, что изменения связанные с внедрением поддержки Юникода настолько серьезно затронут ядро, что приведут к апгрейду основной версии. Так появился PHP6. На этом этапе команда разработчиков Андрея Змиевского уже столкнулась с первыми трудностями.

В первую очередь, это была дилемма, а точнее, трилемма выбора основной кодировки: UTF-8, UTF-16 или UTF-32, каждая из которых имеет собственный набор сильных и слабых мест. Выбор был остановлен на UTF-16. Основным минусами этой кодировки являлось двукратное увеличение объема данных, отсутствие прямой адресации, множественные сопутствующие преобразования данных, и невозможность манипуляции этими данными с помощью стандартных строковых функций языка Си. Как позднее признаются разработчики, если бы они могли начать все сначала, то выбор бы пал на UTF-8.

Как следствие множественных преобразований данных, появилось ощутимое снижение производительности в работе критичных компонент PHP: тормозить стали PDO и нативные расширения БД, строковые операции, так или иначе связанные с поиском подстроки, функции фильтрации данных. Снижение скорости работы было так же отмечено во многих стандартных и дополнительных расширениях PHP.

Это означало страшное: необходимость переписывать весь ключевой код ядра PHP и расширений.

Поскольку ветка находилась в общем доступе всего сообщества разработчиков PHP, развитие проекта было сильно усложнено: для обеспечения приемлемой производительности, новые фичи PHP должны были реализовываться с учетом требований накладываемых поддержкой Юникода, а переработка базового функционала PHP не должна была негативно влиять на уже реализованный функционал. С учетом того, что в полной мере все тонкости ICU понимали менее десяти разработчиков из всего сообщества, процесс двигался очень медленно, если не сказать, топтался на месте.

Команда Змиевского теряла кадры, т.к. люди, попросту, устали годами переписывать снова и снова одни и те же куски кода. В конце концов, реализация решения поддержки Юникода в PHP была признана технически слишком сложной, а дальнейшее развитие проекта - бесперспективным.

В марте 2010 года в палате интенсивной терапии (по иронии судьбы, в английском языке ей соответствует аббревиатура "ICU") доктор Джани Таскинен отключил пациента PHP6 от аппарата искусственного жизнеобеспечения. Ветка PHP6 была перенесена из trunk в branch, trunk заняла ветка PHP 5.4. Часть органов пациента PHP6, не связанных с Юникодом, была передана PHP 5.4.

PHP6: время смерти 11 марта 2010 года, 11 часов 9 минут 37 секунд.

(на этом месте, всем разработчикам, которым была небезразлична судьба этого проекта, и, в целом, нативной поддержки Юникода в PHP, предлагаю встать и почтить минутой молчания, безвременно ушедшую от нас шестую версию PHP).

Каков печальный итог этой истории:

  • десяток загубленных человеколет работы;
  • тысячи экземпляров неактуальной литературы по PHP6 (http://www.wrox.com/WileyCDA/WroxTitle/Professional-PHP6.productCd-0470395095.html);
  • вероятно, полноценная поддержка Юникода в PHP уже никогда не будет реализована.

http://zmievski.org/files/talks/phpcomcon-2011/what-happened-to-unicode-and-php-6.pdf

http://www.teamlalala.com/blog/2010/03/30/whatever-happened-to-php6/

[08.09.11]  
Рейтинг: 4.471 (голосов: 17)
Комментировать

Теги: ПрограммированиеPHP
 
Вернуться к списку
Комментарии (5)

   08.10.11 19:10
0

Грустно все это

   23.03.12 20:24
0

Ничего не вижу грустного! Я даже рад! Так как всегда был и буду противником всяких кривых кодировок. Этож надо было додуматься, целый полнофункциональный, стабильный и основной серверный язык, изза какой-то там кривокодировки переписывать!
Эти utf да юникоды дурацкие, в первую очередь, сама основная операционка windows не поддерживает! А мне например, намного удобней и приятнее, работать с windows-1251.
А кому не хватает её - вот те пусть и придумывают всякие себе костыли. Но не навязывают эту бурду, основному большинству.

   25.07.12 12:19
0

tester:
Ничего не вижу грустного! Я даже рад! Так как всегда был и буду противником всяких кривых кодировок. Этож надо было додуматься, целый полнофункциональный, стабильный и основной серверный язык, изза какой-то там кривокодировки переписывать!
Эти utf да юникоды дурацкие, в первую очередь, сама основная операционка windows не поддерживает! А мне например, намного удобней и приятнее, работать с windows-1251.
А кому не хватает её - вот те пусть и придумывают всякие себе костыли. Но не навязывают эту бурду, основному большинству.

Кодировки одного языка типа cp1251 давно морально устарели.
Вероятно, ты никогда не делал серьёзных мультиязычных проектов.
Система разработчика не имеет никакого значения, а все серьёзные проекты размещаются на юникс-подобных системах.
Жаль шестого...
С другой стороны зачем изобретать python )))

 (Партнер)  27.06.13 17:43
0

Жаль конечно, Зачем на UTF-16 замахнулись...
Сейчас почти во всех средах программирования вместо win-1251 и т.д. идет utf-8,
mysql тоже на utf-8. Этого достаточно лет на 15 вперед. Через 10 лет уже будет видно, что делать дальше.

   05.11.13 14:30
0

Ех у меня тоже осталась Антикварная PHP 6 такая красненькая. Но основы там всеравно изложены. Полностю полностю без дела валяться не валяется...

Ваш комментарий