Состоялся (http://www.mail-archive.com/info-gnu@gnu.org/msg02191.h... выпуск утилиты для организации поиска данных в текстовых файлах - GNU Grep 2.26 (http://www.gnu.org/software/grep/). В новом выпуске реализовано несколько существенных оптимизаций производительности:- Значительно увеличена скорость работы при направлении стандартного вывода в /dev/null;
- Увеличена производительность поиска с использованием шаблона из большого числа фиксированных строк ("grep -F"). Подобный поиск теперь осуществляется с применением алгоритма Ахо—Корасика (https://ru.wikipedia.org/wiki/%D0%90%D0%... вместо ранее используемого алгоритма Коменца-Вальтера;- Ускорена работа поиска в режиме "grep -iF" в условиях когда в системе с многобайтовой локалью применяется маска, содержащая только однобайтные символы;
- Для ускорения запросов со сложными выражениями (например, обратными ссылками), если не указана опция "-i", теперь применяются скомпилированные регулярные выражения (regex fastmap);
- На системах с многобайтовыми локалями увеличена эффективность обработки шаблонов, начинающихся с точки.URL: http://www.mail-archive.com/info-gnu@gnu.org/msg02191.html
Новость: http://www.opennet.me/opennews/art.shtml?num=45266
Да уж, кодировки с переменным размером символа всё аукаются и аукаются...
Именно. Оставили бы одну латиницу - 256 символов как раз бы хватило на все умляуты и подобное. Всё равно дикарям с кириллицей и прочими иероглифами сложную технику давать нежелательно.
Вы или крестик снимите (хватить жопничать байты для UCS-4), или трусы оденьте (KOI8-R во все стринги и чары).
А UCS-4 не текст, символы с кодом 0, однако. Вы предложите вариант, чтобы без управляющих символов в тексте.
Я вообще предлагаю, разработать новую кодировку - машслово со времён 8битовых кодировок выросло в 8 раз, нет ни единой веской причины, кроме legacy, цепляться за эти волшебные 2^8. И да, память в "веские причины" не входит.
Нет ни единой веской причины разрабатывать кодировку с 8-байтным символом. Ошибки в некоторых продуктах при работе с символами переменной длины в "веские причины" не входят.
Т.е. фортеля с сегментной памятью это хорошо и удобно, что аж перешли на модель плоской памяти? А уж как все были в восторге от циркового фокуса под названием PAE, когда в 32битные указатели вдруг вся эта плоская память стала не помещаться.
Я и говорю, или крестик снимите, или трусы наденьте. Эти грабли с символами переменной длины будут ещё очень долго икаться.
Помню, какая истерика была при переходе на 64-битную архитектуру, что, дескать, память жрёт, а тут все строки в 4 раза увеличить. Ну да, ну да.
Лично меня текущая ситуация - UTF-8 на диске и то, что удобнее в каждом конкретном случае - в памяти - полностью устраивает. Это Шигорина опечалило то, что алгоритм поменяли. А ведь - слава utf-8 - поменяли не из-за того, что поломан, а только ради оптимизации.
UTF-8 не нужно по причине непредсказуемости того, сколько символов в этой кодировке можно запихнуть в массив размером столько-то байт. Чисто для примера возьмём максимальную длину имени файла в линуксовых файловых системах, то есть 255 байт. Сколько это будет не латинских букв и цифр при UTF-8? А хз: с кириллицей один результат, с иероглифами другой, с каким-нибудь санскритом или греческим третий. Как выделить в оперативке буфер для текста размером, например, в 1024 символа? Умножай это дело на 6, поскольку в теории символ utf-8 может весить до 6 байт и выделяй, ага:) И прочее и прочее.
А зачем нужно ровно 1024 символа?
1024 - просто для примера. Ёмкость какого-нибудь буфера для сетевых/файловых операций или ещё чего типа длины строки при использовании паскалеподобных языков, у которых она задаётся заранее вместо нулевого символа в качестве признака конца строки. Вот и думай что лучше: то ли вместо одного килобайта оперативки сразу шесть выделить и не мучиться, то ли ждать грабель из серии "последний символ в отведённой памяти целиком не поместился", либо "ой, блин, файл из архива не вынимается по причине русского и слишком длинного имени".
Аллокация с запасом, realloc, аллокация связанных структур и т.д. и т.п.
Зачем вы в задаче работы с кодировками опускаетесь до нюансов, как оптимизировать аллокацию? Оставьте это другим. Тем более не могу представить задачи, когда в оперативке надо выделять память под utf-8 представление всего объема неких данных, которые есть в другом представлении юникода. Бред же какой-то. Работаете поблочно...Проблема с длиной имен, конечно, есть, но только потому, что не придумали универсального и переносимого способа хранить метаинформацию произвольного файла, кроме имени. Вы никакой длиной и кодировкой эту проблему не решите, пока не будет стандарта на метаинформацию. Как дойдет прогресс до работы везде с object storage заместо фс, так и настанет счастье. Ну, относительно...
> Как выделить в оперативке буфер для текста размером, например, в 1024 символа? Умножай это дело на 6, поскольку в теории символ utf-8 может весить до 6 байт и выделяй, ага:) И прочее и прочее.Проблемы сишников явистов и паскалистов не колышат!
>> Как выделить в оперативке буфер для текста размером, например, в 1024 символа? Умножай это дело на 6, поскольку в теории символ utf-8 может весить до 6 байт и выделяй, ага:) И прочее и прочее.
> Проблемы сишников явистов и паскалистов не колышат!А фортеров не колышат проблемы и явистов с паскалистами:)
>>> Как выделить в оперативке буфер для текста размером, например, в 1024 символа? Умножай это дело на 6, поскольку в теории символ utf-8 может весить до 6 байт и выделяй, ага:) И прочее и прочее.
>> Проблемы сишников явистов и паскалистов не колышат!
> А фортеров не колышат проблемы и явистов с паскалистами:).точно Это
Проблемы несколько шире, в MariaDB/MySQL на символ utf8 аллокируется 3 байта, для четырех байтовых символов есть отдельный characterset, для пяти уже нету.
> Это Шигорина опечалило то, что алгоритм поменяли.Не-а. Опечалило то, что из-за кривых данных пришлось сперва обтыкивать это всё горами костылей, а потом их ещё перекладывать.
Кто помнит, сколько времени и где/как в coreutils/grep/sed делали поддержку UTF-8 -- тот поймёт.
> Именно. Оставили бы одну латиницу - 256 символов как раз бы хватило
> на все умляуты и подобное. Всё равно дикарям с кириллицей и
> прочими иероглифами сложную технику давать нежелательно.Особенно мило это утверждение "дикаря" оттеняется разбором подавляющей части достижений "недикарей", сделанной "дикарями" в первом-втором поколении.
PS: подразумевал ИТ, по которым такой разбор на глаза и попадался.
Ну дык - дикарское желание пробиться + образование/цивилизация... ;-)P.S. Если кто-то не понял - предыдущий коммент - сарказм. Я хоть и не сторонник пихания в юникод всего, чего можно, включая клингон, но угадывать "а какая у этой хрени была кодировка" на порядок хуже.
> P.S. Если кто-то не понял - предыдущий коммент - сарказм.Эт как раз понятно, просто смотришь на достижения "цивилизации" и понимаешь, что лучше б её такой не было вовсе.
> Я хоть и не сторонник пихания в юникод всего, чего можно, включая клингон,
> но угадывать "а какая у этой хрени была кодировка" на порядок хуже.UCS-4 выглядит разумнее всем, кроме... обратной совместимости с семибитной ASCII.
Ахах, до сих пор 100% ватан)
Михаил заработался и не смог в сарказм :)
> Всё равно дикарям с кириллицей и прочими иероглифами сложную технику давать нежелательно.Алекс, через 30 лет вы на первое место поставите иероглифы, а дикари у вас будут с алфавитами.
>> Всё равно дикарям с кириллицей и прочими иероглифами сложную технику давать нежелательно.
> Алекс, через 30 лет вы на первое место поставите иероглифы, а дикари
> у вас будут с алфавитами.расскажите нам а почему китайцы до сих пор не захватили монголию?
Гуглите, что такое "внутренняя монголия" и где она находится.
> Алекс, через 30 лет вы на первое место поставите иероглифы, а дикари у вас будут с алфавитами.в Поднебесной уже давно так.
>> Алекс, через 30 лет вы на первое место поставите иероглифы, а дикари у вас будут с алфавитами.
> в Поднебесной уже давно так.В Японии же.
> В Японии же.почему у одичавших на острове китайцев будет поиначе? :)
Японская письменность весьма условно иероглифы - их там что-то около трёх тысяч употребляется, всё остальное добирается слоговым письмом. Примерным аналогом их иероглифов в алфавитных языках можно считать корни слов.
Я ж говорю - дикари
Я (возможно, предвзято) придерживаюсь мнения, что цивилизация в её современном/будущем виде с иероглифами совместима плохо. По причинам в основном психологического толка. Пока это подтверждается - товарищи, у которых нет алфавита, всё ещё догоняют и копируют, хоть и на очень хорошем уровне. Оригинальных открытий/изобретений особо не видно.
> товарищи, у которых нет алфавитаНапомню про опиумные войны -- сдаётся мне, разница ещё и в совести либо её отсутствии.
> Я (возможно, предвзято) придерживаюсь мнения, что цивилизация в её современном/будущем
> виде с иероглифами совместима плохо.Алекс, ну ты что, ну зачем учить 33 буквы, когда можно выучить 3 тысячи иероглифов!!! :-)
>> Я (возможно, предвзято) придерживаюсь мнения, что цивилизация в её современном/будущем
>> виде с иероглифами совместима плохо.
> Алекс, ну ты что, ну зачем учить 33 буквы, когда можно выучить
> 3 тысячи иероглифов!!! :-)угу, и про четыре тональности не забыть - т.сказать развивать музыкальный слух
Это не однобайнтные кодировки аукаются, а однобайтные терминалы.
О том, как терминалы аукаются, вообще вспоминать неохота.
> Значительно увеличена скорость работы при направлении стандартного вывода в /dev/nullWeb scale!
А ещё вечный цикл стал выполняться в два раза быстрее. ;-)
Когда уже добавят поддержку systemd?Жду-недождусь systemd-grepd с поддержкой multiseat!
> Значительно увеличена скорость работы при направлении стандартного вывода в /dev/null;Просто делает вид, что работает, раз вывод не нужен?
Вполне рабочий кейз:
[lexa@centos-test ~]$ cat text.txt
some text
[lexa@centos-test ~]$ grep some text.txt > /dev/null
[lexa@centos-test ~]$ echo $?
0
[lexa@centos-test ~]$ grep same text.txt > /dev/null
[lexa@centos-test ~]$ echo $?
1
-q не осилил?
Может интересовать только $?, например
>> Значительно увеличена скорость работы при направлении стандартного вывода в /dev/null;
> Просто делает вид, что работает, раз вывод не нужен?Скорее -m1 -q ж симулирует.
И вообще, там http://git.savannah.gnu.org/gitweb/?p=grep.git&a=search&h=v2... же есть http://git.savannah.gnu.org/gitweb/?p=grep.git;a=commit;h=af... git.
Ускоряем /dev/null, дай Керниган кажому:
This sped up 'seq 10000000000 | grep . >/dev/null' by a factor of 380,000 on my platform
> Значительно увеличена скорость работы при направлении стандартного вывода в /dev/null;Мне кажется, что нефиг программе знать куда я её вывод перенаправляю (и менять своё поведение из-за этого).
>> Значительно увеличена скорость работы при направлении стандартного вывода в /dev/null;
> Мне кажется, что нефиг программе знать куда я её вывод перенаправляю (и
> менять своё поведение из-за этого).А я вот уверен, что уважающая _меня_ программа должна грепать в дев-нулл быстро, как только может.
Скажи это --color=auto