LINUX.ORG.RU

GNU Grep 2.17: десятикратный рост производительности

 ,


1

2

Вышла новая версия GNU Grep 2.17. Разработчики заявляют о десятикратном росте производительности, собственно, это и есть главное изменение.

  • grep -i стал работать в 10 раз быстрее в многобайтовых локалях для регулярных выражений, не содержащих \ или [;
  • grep (без -i) стал работать в более чем 7 раз быстрее в многобайтовых локалях, когда обрабатывается много строк с совпадениями;
  • полностью убрана устаревшая опция grep --mmap, которая не используется с января 2012-го года.

>>> Подробности

★★★★★

Проверено: leave ()
Последнее исправление: ymn (всего исправлений: 3)
Ответ на: комментарий от alex-w

Одна из традиционных тем в топиках о BSD - «а у нас в linux юникод есть!»

alex-w ★★★★★
()
Ответ на: комментарий от bhfq

Input в cmd.exe только той локали которой установлен язык в системе по умолчанию, например в english винде нельзя ввести кириллицу, хотя шрифты могут отображать да. :D
шел бородатый 2014-й

Внес в заметки.

Csandriel
()
Ответ на: комментарий от bhfq

хотя шрифты могут отображать да. :D

И «чо»? Если я запущу: LC_ALL=en_GB.iso8859-1 urxvt, то тоже не смогу ввести кириллицу, хотя «шрифты позволяют». А как иначе?

anonymous
()
Ответ на: комментарий от anonymous

Из коробки в английской венде даже шрифты не позволяют ввести кирилицу, там будет ?????????????? ??????? ????

bhfq ★★★★★
()
Ответ на: комментарий от bhfq

например в english винде нельзя ввести кириллицу, хотя шрифты могут отображать да

Из коробки в английской венде даже шрифты не позволяют ввести кирилицу

Короче, определись сначала. И скорее всего там эмулятор терминала с однобайтовой кодировкой - так и в онтопике будет: либо не позволять вводить, либо заменять на допустимый.

anonymous
()
Ответ на: комментарий от alex-w

Это он стандарт, когда прихвастнуть надо. А когда до брутальной бытовухи дело доходит, то этот юникод становится не очень юникодным - формальность одна, черезжопная работа или стройный набор костылей.

все отлично работает. юникод был светлым лучем во тьме кодировок.

dikiy ★★☆☆☆
()
Ответ на: комментарий от router

Что это за регулярные выражения такие без \ и [ ?

например, просто текст

MyTrooName ★★★★★
()
Ответ на: комментарий от vertexua

Столлману это скажи, или раскажи об ОС Linux. GNU - это ОС (пусть чаще всего и используется с ядром Linux), а организация - это FSF.

Begemoth ★★★★★
()
Ответ на: комментарий от Csandriel

быдло боится и стесняется думать о том, что первый процент брали двадцать лет. А половину второго взяли за два года. Ты в математику можешь? Сядь-ка да запили мне уравнение

добавь еще ограничение <=100%

и если запиливать, то какую-нить цепь маркова, или аналог - для абсолютного выражения linux и non-linux. а относительное считать как дробь

MyTrooName ★★★★★
()
Ответ на: комментарий от dikiy

юникод был светлым лучем во тьме кодировок.

Какой именно юникод?:)

tensai_cirno ★★★★★
()

а при чём тут grep? Там разве своя реализация regex(7) (REGEX(7) Linux Programmer's Manual REGEX(7) NAME regex - POSIX.2 regular expressions)

emulek
()
Ответ на: комментарий от dikiy

А кто-то пользовался грепом в многобайтовых локалях?

я. постоянно.

я тоже.

emulek
()
Ответ на: комментарий от emulek

LC_ALL=en_GB.iso8859-1 _urxvt_

4.2
xfce4-terminal

Тише будь, или хотя бы продемострируй выхлоп `locale' запущенного эмулятора.

anonymous
()
Ответ на: комментарий от emulek

а при чём тут grep? Там разве своя реализация regex(7)

У тебя еще и память девичья, недавно тебе всем тредом объясняли(*) про --with-included-regex.

// * - ну ладно, чуть преувеличил

anonymous
()
Ответ на: комментарий от anonymous

У тебя еще и память девичья, недавно тебе всем тредом объясняли(*) про --with-included-regex.

так и не объяснили. А я не поленился, и прочитал:

--without-included-regex don't compile regex; this is the default on systems with recent-enough versions of the GNU C Library (use with caution on other systems).

это ты вообще к чему сказал-то? ты хоть понимаешь, что означает «compile regex»?

emulek
()
Ответ на: комментарий от anonymous

Тише будь, или хотя бы продемострируй выхлоп `locale' запущенного эмулятора.

естественно там у меня всё в ru_RU.UTF-8

emulek
()
Ответ на: комментарий от emulek

естественно там у меня всё в ru_RU.UTF-8

И что ты этим хотел показать? Контест осиль, а не отвечай на отдельные сообщения.

это ты вообще к чему сказал-то? ты хоть понимаешь, что означает «compile regex»?

Не к месту сказал, согласен на этот раз не подходит. Просто ты многовато не по делу вбрасываешь, надо воспитывать.

anonymous
()
Ответ на: комментарий от anarquista

В grep используется свой DFA.

Прям-таки всегда dfa? Кэп напоминает, что gnu grep окостылен backreference-ами.

anonymous
()
Ответ на: комментарий от anonymous

И что ты этим хотел показать? Контест осиль, а не отвечай на отдельные сообщения.

иногда мне это просто тупо лень ☺

Не к месту сказал, согласен на этот раз не подходит. Просто ты многовато не по делу вбрасываешь, надо воспитывать.

дык раз ты взял на себя роль отца, то изучи матчасть. А то как-то глупо получается... Как с царём. Вроде как отец родной, а лепечет как трёхлетняя лялька...

emulek
()
Ответ на: комментарий от anarquista

Да, естественно. В grep используется свой DFA.

да, действительно. Зачем-то зафигачили свой DFA, посмотрел dfa.c, они только не осилил диапозоны по типу обсуждавшихся [а-я], а всё остальное реализовано своим велосипедом с квадратными колёсами. То-то я давно замечал, что grep тупит по сравнению с sed(в sed используется regex(7) из glibc по дефолту)

emulek
()
Ответ на: комментарий от emulek

дык раз ты взял на себя роль отца, то изучи матчасть

Да куда мне, так изредка обновить инфу на доске позора.

anonymous
()
Ответ на: комментарий от emulek

Не не осилили, а это нельзя сделать, потому что диапазоны локально-специфичны. Поэтому-то и вызывается функция из glibc.

anarquista ★★★★★
() автор топика
Ответ на: комментарий от anarquista

Не не осилили, а это нельзя сделать, потому что диапазоны локально-специфичны. Поэтому-то и вызывается функция из glibc.

а -i по твоему не локально-специфична? Там ведь не по байтам проверяет, там более грамотный алгоритм(т.е. может в 2.17 более грамотный, потому и скорость в 10 раз больше, в glibc это давно уже так).

emulek
()
Ответ на: комментарий от anonymous

findstr рвет ваш grep вдоль и поперек

а пруфы где? Или ты рекламных листовок мысы начитался?

Или уныло вбросил?

emulek
()
Ответ на: комментарий от anonymous

Рвёт нормальная сишка на чарах+интах

сравни с гнутой sed, там regex из glibc. И удивись.

PS: полезно тебе будет почитать о «новых» алгоритмах поиска в тексте. Вот например: http://en.wikipedia.org/wiki/Bitap_algorithm такое порвёт любой твой код на чарах, даже на i8086.

emulek
()
Ответ на: Вендекапец. от Camel

Надыть форкнуть под названием GNU Grep XP или там GNU Grep 8.1 чтобы точно вендекапец.

d_Artagnan ★★
()
Ответ на: комментарий от tensai_cirno

Да и в cmd.exe всё отлично вводится, нужно только в его настройках юникодный шрифт выбрать, т.к. по умолчанию используются растровые шрифты, сделанные под древнючие однобайтные кодировки (CP437 в английской винде, CP866 в русской). Обратная совместимость, блин, доведённая до абсурда.

anonymous
()
Ответ на: комментарий от bhfq

4.2 Ставишь в настройках русский и все работает по крайней мере с NT4 до XP работало, да и в серверном до win2008 тоже работает. Может конечно позже поломали.

anc ★★★★★
()

ну когда же когда же выйдет sed и ed.

У нас назначена миграция с MS Office на эти 2 редактора, а там 2 blocking bugs, которые тормозят все. девы не реагируют. Что делать?

EnterpriseMobility
()

Звучит как анонс очередной версии Oracle Linux.

melkor217 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.