/dev/random писал(а): ↑03.07.2010 20:53
Но внутри должен быть юникод. Неважно, какой - utf8, ucs2, любой. Иначе это чревато багами наподобие тех, которые можно наблюдать в "быстром редактировании".
да... согласен с вами.
Nazyvaemykh писал(а): ↑03.07.2010 22:10
Проверял на машинах сильно разных по производительности. И на той, и на другой (sed 4.15 и 4.2.1) скорость работы простейшего скрипта в зависимости от локали (UTF-8 и C) меняется на порядок.
тут сразу много причин:
1) самих байтов для обработки текста в 1.5-2 раза больше
2) буквы больше, и для таблиц недостаточно 256х32 бита. Уж не знаю, как это там реализованно, но даже простейший поиск обычного слова из-за этого дольше.
3) в 32х байтной архитектуре можно искать в строке сразу 32х буквенный шаблон. Беда в том, что для UTF это всего 16и буквенный, и его часто не хватает, приходится искать по частям.
4) в UTF-8 иные символы из 1го байта, а иные из двух, потому надо сначала выяснить границы символов.
ну вот когда очистят Сеть от дерьма, тогда можно и утф вводить :( А до тех пор приходится юзать разные костыли, вроде новой sed-команды z (а иначе даже не очистить стороку от несимволов, которые ни с чем не совпадают).
watashiwa_darede... писал(а): ↑04.07.2010 15:29
Всё, что может sed+cp1251, может и sed+utf-8. sed+utf-8 может гораздо больше.
не вижу никаких плюсов, кроме поддержки более двух языков. Но это обычно не надо, всегда можно записать особый символ как-то иначе, например в HTML через & #.
watashiwa_darede... писал(а): ↑04.07.2010 15:29
Да, объем текста в utf-8 больше, чем в cp1251, обрабатывается, соответственно, тоже медленнее, но в 99.9% случаев это не имеет значения.
имеет ИМХО. я не согласен с цифрой 99.9, ИМХО что-то ближе к 80...
Но намного более важна проблемма надёжности:
Вот например такой скрипт выполняет любую команду, которую ему подсунули в качестве входа(я подсунул ls):
Код: Выделить всё
echo -e "--ф\xD1; ls" | sed -r 's/\W*(\w*).*/\1/;s/.*/echo "&"/e'
хотя по замыслу автора должен просто вывести первое слово на stdout...