grep
, ripgrep
, ugrep
, The Silver Searcher
и т. д. Следующие тесты сравнивают производительность hypergrep
с:
v13.0.0
v2.2.0
v3.11.2
Тип | Ценить |
---|---|
Процессор | Intel(R) Core(TM) i9-11900KF 11-го поколения @ 3,50 ГГц 3,50 ГГц |
Расширения набора команд | Intel® SSE4.1, Intel® SSE4.2, Intel® AVX2, Intel® AVX-512 |
Установленная оперативная память | 32,0 ГБ (используется 31,9 ГБ) |
твердотельный накопитель | АДАТА SX8200PNP |
ОС | Убунту 20.04 ЛТС |
Компилятор С++ | г++ (Ubuntu 11.1.0-1ubuntu1-20.04) 11.1.0 |
коммит vcpkg: 662dbb5
Библиотека | Версия |
---|---|
argparse | 2.9 |
параллельная очередь | 1.0.3 |
ФМТ | 10.0.0 |
гиперсканирование | 5.4.2 |
libgit2 | 1.6.4 |
OpenSubtitles.raw.en.txt
Следующие поиски выполняются в одном большом файле, кэшированном в памяти (~13 ГБ, OpenSubtitles.raw.en.gz
).
регулярное выражение | Количество строк | аг | угреп | рипгреп | гипергреп |
---|---|---|---|---|---|
Посчитайте, сколько раз Холмс что-то сделалhgrep -c 'Holmes did w' | 27 | н/д | 1.820 | 1,022 | 0,696 |
Литерал с суффиксом регулярного выраженияhgrep -nw 'Sherlock [AZ]w+' en.txt | 7882 | н/д | 1,812 | 1,509 | 0,803 |
Простой литералhgrep -nw 'Sherlock Holmes' en.txt | 7653 | 15,764 | 1,888 | 1,524 | 0,658 |
Простой литерал (без учета регистра)hgrep -inw 'Sherlock Holmes' en.txt | 7871 | 15.599 | 6.945 | 2.162 | 0,650 |
Чередование литераловhgrep -n 'Sherlock Holmes|John Watson|Irene Adler|Inspector Lestrade|Professor Moriarty' en.txt | 10078 | н/д | 6,886 | 1,836 | 0,689 |
Чередование литералов (без учета регистра)hgrep -in 'Sherlock Holmes|John Watson|Irene Adler|Inspector Lestrade|Professor Moriarty' en.txt | 10333 | н/д | 7.029 | 3.940 | 0,770 |
Слова, окружающие буквальную строкуhgrep -n 'w+[x20]+Holmes[x20]+w+' en.txt | 5020 | н/д | 6 минут 11 секунд | 1,523 | 0,638 |
torvalds/linux
Следующие поиски выполняются по всему дереву исходного кода ядра Linux (после запуска make defconfig && make -j8
). Используемый коммит — f1fcb.
регулярное выражение | Количество строк | аг | угреп | рипгреп | гипергреп |
---|---|---|---|---|---|
Простой литералhgrep -nw 'PM_RESUME' | 9 | 2,807 | 0,316 | 0,147 | 0,140 |
Простой литерал (без учета регистра)hgrep -niw 'PM_RESUME' | 39 | 2.904 | 0,435 | 0,149 | 0,141 |
Регулярное выражение с буквальным суффиксомhgrep -nw '[AZ]+_SUSPEND' | 536 | 3.080 | 1,452 | 0,148 | 0,143 |
Чередование четырех литераловhgrep -nw '(ERR_SYS|PME_TURN_OFF|LINK_REQ_RST|CFG_BME_EVT)' | 16 | 3,085 | 0,410 | 0,153 | 0,146 |
Юникод греческийhgrep -n 'p{Greek}' | 111 | 3,762 | 0,484 | 0,345 | 0,146 |
apple/swift
Следующие поиски выполняются по всему дереву исходного кода Apple Swift. Используемый коммит — 3865b.
регулярное выражение | Количество строк | аг | угреп | рипгреп | гипергреп |
---|---|---|---|---|---|
Объявление функции/структуры/перечисления, за которым следует действительный идентификатор и открывающая скобка.hgrep -n '(func|struct|enum)s+[A-Za-z_][A-Za-z0-9_]*s*(' | 59026 | 1.148 | 0,954 | 0,154 | 0,090 |
Слова, начинающиеся с букв алфавита, за которыми следуют не менее 2 цифр.hgrep -nw '[A-Za-z]+d{2,}' | 127858 | 1.169 | 1,238 | 0,156 | 0,095 |
Workd начинается с заглавной буквы, за которой следуют буквенно-цифровые символы и/или символы подчеркивания.hgrep -nw '[AZ][a-zA-Z0-9_]*' | 2012372 | 3.131 | 2,598 | 0,550 | 0,482 |
Оператор Guard let, за которым следует действительный идентификаторhgrep -n 'guards+lets+[a-zA-Z_][a-zA-Z0-9_]*s*=s*w+' | 839 | 0,828 | 0,174 | 0,054 | 0,047 |
/usr
Следующие поиски выполняются в каталоге /usr
.
регулярное выражение | Количество строк | аг | угреп | рипгреп | гипергреп |
---|---|---|---|---|---|
Любой URL-адрес HTTPS или FTPhgrep "(https?|ftp)://[^s/$.?#].[^s]*" | 13682 | 4.597 | 2,894 | 0,305 | 0,171 |
Любой IPv4-адресhgrep -w "(?:d{1,3}.){3}d{1,3}" | 12643 | 4,727 | 2.340 | 0,324 | 0,166 |
Любой адрес электронной почтыhgrep -w "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}" | 47509 | 5.477 | 37.209 | 0,494 | 0,220 |
Любая действительная дата MM/DD/YYYY hgrep "(0[1-9]|1[0-2])/(0[1-9]|[12]d|3[01])/(19|20)d{2}" | 116 | 4.239 | 1,827 | 0,251 | 0,163 |
Подсчитайте количество HEX-значенийhgrep -cw "(?:0x)?[0-9A-Fa-f]+" | 68042 | 5,765 | 28,691 | 1,439 | 0,611 |
Найдите литерал в любом C/C++.hgrep --filter ".(c|cpp|h|hpp)$" test | 7355 | н/д | 0,505 | 0,118 | 0,079 |
vcpkg
git clone https://github.com/microsoft/vcpkg
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg install concurrentqueue fmt argparse libgit2 hyperscan
hypergrep
используя cmake
и vcpkg
git clone https://github.com/p-ranav/hypergrep
cd hypergrep
cmake
старше 3.19
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=<path_to_vcpkg>/scripts/buildsystems/vcpkg.cmake ..
make
cmake
новее 3.19
Используйте пресет release
:
export VCPKG_ROOT=<path_to_vcpkg>
cmake -B build -S . --preset release
cmake --build build
Чтобы собрать двоичный файл для переносимости x86_64, вызовите cmake с опцией -DBUILD_PORTABLE=on
. При этом будут использоваться -march=x86-64 -mtune=generic
и -static-libgcc -static-libstdc++
и статически связываться стандартная библиотека C++ и среда выполнения GCC с двоичным файлом, уменьшая зависимости от целевой системы.