LINUX.ORG.RU

krep 2.0.0

 , krep, , ,


1

2

11 февраля состоялся выпуск 2.0.0 krep — высокопроизводительной, многопоточной, SIMD-оптимизированной консольной утилиты для поиска строк.

Основные особенности:

  • В зависимости от типа шаблонов для оптимальной производительности используются алгоритмы Бойера—Мура—Хорспула, Кнута—Морриса—Пратта или Ахо—Корасик.
  • Использование отображаемого на память файла при обработке больших файлов.
  • Автоматическое распределение поиска по доступным ядрам процессора.
  • SIMD-оптимизация с поддержкой SSE4.2, AVX2 и NEON.

Утилита написана на языке C и распространяется по лицензии BSD-2.

Изменения:

  • значительно улучшена производительность многопоточной обработки пути в функции search_file;
  • добавлен скрипт test/benchmark_krep_vs_rg.sh для сравнения krep и ripgrep;
  • исправлена ошибка рекурсивного пропуска минимизированных ресурсов (вида .min.*);
  • улучшено тестирование.

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

★★★★★

Проверено: CrX ()
Последнее исправление: dataman (всего исправлений: 2)

используются алгоритмы Бойера—Мура—Хорспула, Кнута—Морриса—Пратта или Ахо—Корасик.

Как много незнакомых слов.

Есть какие-нибудь примеры использования, показывающие, чем конкретно оно лучше grep, rg, ag и т. д.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от dataman

Да пускай ставят. Я не стыжусь незнания. Стыдно, когда не хочешь учиться или узнавать, а не когда не знаешь :)

(Я там во втором абзаце вопросительный знак в конце забыл, не успел поправить, но это вопрос. Чисто в производительности дело, или есть ещё какие-то фичи, скрытые за всем этим?)

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)

Ну тут возникает вопрос: насколько все эти крутые улучшения релевантны для реального мира. Потому что при замене grep-а на krep вокруг всё равно останутся всё те же текстовые утилиты. И ускорение вдвое в поиске сожрётся медленностью какого-нибудь, условно говоря, sort-а, в том же конвеере обработки данных.

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

чем конкретно оно лучше grep, rg, ag и т. д.

Я ей особо не пользуюсь, но вот чем хуже: что-то не очень хорошо с не-ASCII-поиском с некоторыми опциями.

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

Ну тут возникает вопрос: насколько все эти крутые улучшения релевантны для реального мира. Потому что при замене grep-а на krep вокруг всё равно останутся всё те же текстовые утилиты. И ускорение вдвое в поиске сожрётся медленностью какого-нибудь, условно говоря, sort-а, в том же конвеере обработки данных.

Ну вообще есть немало юзкейсов, где остальные утилиты и не нужны, или же сортировка занимает буквально меньше секунды. А поиск до этого — скажем 50 секунд одной утилитой и 15 другой. Даже просто поиск по гигабайтам логов, там просто надо «отгрепать», а сортировать особо ничего и не требуется, оно и так отсортировано, или на вход сортировщику из всех гигабайт идут пара десятков строк, и он отрабатывает моментально.

CrX ★★★★★
()

По зависимостям тянет половину KDE?

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

Aho-Karasique. Используется алгоритм с развертыванием конечного автомата из пакетов и карпов (в пакете) для словаря. Все понятно же.

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

И ускорение вдвое в поиске сожрётся медленностью какого-нибудь, условно говоря, sort-а

там Бернштейн как раз на днях выпустил новую версию своего djbsort))

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

поиск по гигабайтам логов, там просто надо

сдаётся мне что современные логи (потенциально) таких объёмов сразу загоняются в базы и уже там происходят ротация/сжатие/поиск/фильтры

то есть из ком.строки: `krep «жезеляко» 100Gb.log` это заявка на увольнение кого-то там, возможно админа

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

Логи бывают разными. Не всегда они пишутся софтом, написанным админом. Не всегда их грепает именно админ (если не считать админов локалхоста). Да и текстовый формат прост и подходящ во многих случаях. Грепать может раз в год надо, а БД городить и держать запущенной постоянно.

Ну и с логами это просто самый простой пример — это те самые данные, которых может быть много, и которые при этом редко требуют много утилит в конвеере, просто поиск.

Загонять какой-нибудь access.log nginx’овский, по которому раз в год может быть нужно что-то загрепать, в БД — скорее это может быть заявкой на увольнение за оверинжениринг.

CrX ★★★★★
()

Что только не придумают, лишь бы Loki/Logstash/Greylog не использовать.

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

то есть из ком.строки: krep «жезеляко» 100Gb.log это заявка на увольнение кого-то там, возможно админа

Так в общем и есть.

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

Загонять какой-нибудь access.log nginx’овский, по которому раз в год может быть нужно что-то загрепать, в БД — скорее это может быть заявкой на увольнение за оверинжениринг.

Оверинжинириг - писать грепалку с SIMD-оптимизациями, а пихать логи в центральное хранилище принято со времен syslog’а, который старше большинства местных комментаторов.

pekmop1024 ★★★★★
()

Основной особенностью должно быть включение в состав KDE.

skyman ★★★★★
()

высокопроизводительной многопоточной ... оптимизированной ... утилиты

Звучит как что-то стрёмное на JS или на каких-нибудь zig или go... Но нет, хороший софт на C.

Shadow ★★★★★
()

день добрый!
прочитал и, да, не хватило «чуть более» развернутого описания.
использую для локального/контекстного поиска recoll (очень старую версию, переделанную под себя), результаты выдает мгновенно (как и ожидается). хотелось бы понять плюс/минус, как оно соотноситься (без обращения на gui/console).

спасибо

sunjob ★★★★★
()

Нейминг криповый ). Я бы назвал rrg (ripripgrep)

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

прочитал и, да, не хватило «чуть более» развернутого описания.

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

Я вот не помню, грепал ли когда-нибудь вообще регексы. И на самом деле хотел написать подобную штуку, но похоже все написано до нас.

Lrrr ★★★★★
()

Почему нет поддержки GPU и MPI? Кто в здравом уме будет использовать утилиту для поиска строк, которая не масштабируется на 4096 узлов?

buddhist ★★★★★
()

Зачем оно целый ман вывело при ошибке? За что не люблю новомодный хипстерский софт, так это за то, что он ведет себя по-вендовому.

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

Я вот не помню, грепал ли когда-нибудь вообще регексы

То есть ты грепал не регэкспы, но про ключ -F не слышал? Я вот grep без него не использую за редкими исключениями.

firkax ★★★★★
()

В 2026 уже пора научиться делать подобные утилиты в качестве либы (library first), а к ней уже cli/tui/gui frontend и API для разных языков.

yvv1
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.