среда, 14 апреля 2010 г.

Microsoft не использует алгоритм сопоставления Unicode

Это перевод Microsoft does not use the Unicode Collation Algorithm. Автор: Майкл Каплан.

В 1980-м Robert A. Heinlein в своей книге Expanded Universe рассказал такую историю (потерпите меня - я клянусь, что это имеет отношение к теме поста):
Несколько лет назад меня посетил астроном, довольно молодой и выдающийся. Он сказал, что давно читает мои работы, и дальнейший разговор подтвердил это. Я рассказал ему о времени, когда мне нужна была синергетическая орбита от Земли до постоянной станции; я рассказал ему историю, по которой она потребовалась, а он был знаком с ней, упомянув, что читал книгу в средней школе.

Эта орбита внешне похожа на межпланетное перемещение комет, но, фактически, является серией компромиссов для прибытия вровень со станцией; прошедшее время является негладким интегралом, которого нет в руководстве Hudson-а, но он может быть решён методами численного интегрирования.

Я женат на женщине, которая знает больше математики, истории и языков, чем я. Это должно научить меня смирению (а иногда и делает, на несколько минут). Ее мозг очень помогает мне профессионально. Я сказал этому молодому ученому, как мы получили ярды исписанной бумаги, а затем каждый из нас работал три дня, независимо, чтобы решить проблему и проверить друг друга, - то ответ исчез в одной строке одного параграфа (SPACE CADET), но всё же усилия были стоящими.

Доктор Whoosis спросил: "Но почему вы просто не прогнали это через компьютер?".

Я моргнул. Затем я медленно и мягко сказал: "Мой дорогой мальчик...", (обычно я не называю докторов в хардкорных науках "дорогими мальчиками" - они внушают уважение. Но это был особый случай) - "Мой дорогой мальчик... это был 1947-й".

Ему потребовалось несколько моментов, чтобы сообразить, затем он покраснел...

Я вспоминаю об этой истории каждый раз, когда человек, говорит о чём-то, не принимая во внимание время, когда произошли события, и влияние времени на события. И это особенно заметно, когда речь заходит о теме этого поста - люди, которые возмущаются, почему Microsoft не поддерживает Unicode Collation Algorithm. Они замечают, что в Windows есть эквивалентный фреймворк, и предполагают, что они оба используют одну и ту же "таблицу по-умолчанию", которая служит основой для всех сравнений (другими словами, они полагают, что Microsoft основывается на сортировочных таблицах весов Unicode).

Но в реальности всё оказывается немного не так. Коэффициенты Unicode являются частью UCA, который был представлен в черновом варианте в марте 1997-го. Он имел статус черновика до ноября 1999-го, и стал стандартом только после августа 1999-го.

Windows, с другой стороны, имела эту архитектуру и все таблицы аж со времён поставок NT 3.1 - более десяти лет до этого момента. Как она могла основываться на стандарте Unicode, который вообще не существовал в то время, даже в виде черновой разработки? В подобных случаях искушение начать ответ с "Мой дорогой мальчик..." ("Моя дорогая девочка...") - просто непреодолимо!

Что касается дополнительной функциональности, то я просто скажу, что за последние 15 лет в Windows было добавлено множество различной поддержки языков, и опыт, который был получен от поддержки сопоставления (collation) воистину велик. Его обескураживающие возможности продолжают временами работать, учитывая, как хорошо он выступал всё это время :-)

С философской точки зрения, сопоставление (collation) в Windows всегда основывалось на лингвистических данных, которые являются его ядром - технические вопросы всегда регулировались данными, а не наоборот. Я думаю, что это явилось той уникальной силой нашей реализации, которая позволила ей превзойти другие схемы в вопросах поддержки многих языков, которая (по моему мнению) тоже выдающаяся. Таблицы, безусловно, были созданы на базе совершенно другой лингвистической и архитектурной философии. И (игнорируя моё мнения о том, что лучше) данные от любого подхода будут не слишком-то подходить для другого.

Знаковым событием (ну, по крайней мере для меня!) стало то, что на двух последних встречах Unicode Technical Committee (технического комитета Unicode) было сделано несколько решений, которые приведут к тому, что будущие версии таблицы по-умолчанию в UCA будут больше похожи на Microsoft-кую. Это не потому, что это "путь Microsoft" (мы давали советы по принципам для UCA, но не настаивали на этом, потому что в этом нет необходимости - поскольку мы не используем его), а потому что один из авторов UCA предложил подстройку на основании советов экспертов и отзывов пользователей. Я думаю, что это означает, что наша идея была верна, да? :-)

3 комментария:

  1. Ответ подразумевает:
    Мой дорогой дедушка, я правильно понял вашу позицию. Если я хочу написать программу, которая одинаково работает в разных системах мне надо пользоваться libICU, и не трогать реализацию от Microsoft с вашими оригинальными идеями. :)))

    ОтветитьУдалить
  2. "в течение нескольких минут"

    тут скорее другйо перевод: "НА несколько минут"

    ОтветитьУдалить
    Ответы
    1. Поправил, спасибо. Но всё равно перевод корявый...

      Удалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.