LINUX.ORG.RU

Самый быстрый grep написан на Go

 , ,


1

3

Некто Sven Taute сдевелопил на Go альтернативу grep: http://sift-tool.org/info.html

Работает быстрее не только grep, но и ack, ag (the_silver_searcher), pt (ag на Go), по ссылке есть бенчмарки.

Кто убедился в этом на своей машине и условиях?

Для запуска Go не нужен (в чем кайф, а), можно скачать бинарники и запустить потестить, исходный код здесь.


ага, так я вам и поверил

хипсторы говеные

unt1tled ★★★★
()
Ответ на: комментарий от anonymous7
$ cat test.txt 
привет
Привет
ПрИвЕт

./sift  -i привет 
test.txt:привет

быстрофикс

anonymous7
()

Изза тебя я начинаю нелюбить следить за тэгом go. Вечно какой-то идиотский тупняк.

Осиль прочитать кейс этого грепа, зачем и для чего его сделали, а потом, что бы протестить, JUST DO IT!

iu0v1
()

На реддите же разобрали: https://www.reddit.com/r/vim/comments/3mtevg/sift_grep_on_steroids/

по ссылке есть бенчмарки

4.2, In my tests, performance is equivalent or worse than ag. Since they don’t provide any code or dataset to support their benchmarks, I can only assume those are fabricated.

Ну и

even very basic things like \K or (?=) yield Error: cannot parse pattern: error parsing regexp: invalid or unsupported Perl syntax. ag handles those just fine.

tl;dr: if you’re using ag, you probably shouldn’t switch.

x3al ★★★★★
()

И что характерно: тот же pt, с которым сравнивали в этих так называемых «бенчмарках» — тоже написан на go и тоже идёт с «бенчмарками», в которых он рвёт всё. В одном наборе бенчмарков он, получается, на 2 порядка медленнее, чем в другом. Кому верить? Или go — язык для хипстеров, которые рисуют бенчмарки с потолка?

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

Или go — язык для хипстеров, которые рисуют бенчмарки с потолка?

Что за идиотский вброс? Если кто-то нарисует бэнчмарк написав программу на крестах, значит кресты для хипстеров?

iu0v1
()

это такая спортивная дисциплина - ускорение grep?

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

Это неприятная особенность Go. В нем очень много подобных людей (я их называю goдаунами), из которых прет маркетоидная чепуха и тупой фанбоизм.

Черт его знает, почему именно в Go подобная проблема так остро стоит.

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

Черт его знает, почему именно в Go подобная проблема так остро стоит.

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

Плюс по комьюнити я вижу обратную сторону политики размещения сторонних пакетов. Всем нужны звёздочки с гитхаба. Чем больше звёздочек у твоего пакета - тем больше у тебя меч амура. Это провоцирует плодить тысячи пакетов одного назначения, и что бы в этом море быть популярным - нужно «продавать». А продажи и реклама это враки и ухищрения.

iu0v1
()

Кстати, первый же бенчмарк: 35 гигабайт логов за 0.579 секунды.

60.45 ГБ/с. Развод чистейшей воды потому, что пропускная способность DDR4 на современных десктопах в синтетике едва добирается до 62.5 ГБ/с и это на лучшем железе (DDR3 чуть не дотягивает до 60ГБ/с). Впрочем, это не претензия к ТС: странно ожидать от него умения считать.

Ну либо у процессора, использованного для бенчмарков, есть 35Гб L3-кэша.

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

60.45 ГБ/с. Развод чистейшей воды потому, что пропускная способность DDR4 на современных десктопах в синтетике едва добирается до 62.5 ГБ/с

The weblog searches were done on a big server

А вдруг у него там суперкомпьютер из top100?

foror ★★★★★
()

Работает быстрее не только grep, но и ack, ag (the_silver_searcher), pt (ag на Go), по ссылке есть бенчмарки.

Почему оно работает в 8 раз быстрее Си или на чем там написан ag?

Кто убедился в этом на своей машине и условиях?

У меня не было огромных данных как у него, но на 194Мб показало в 5 раз быстрее ag.

Для запуска Go не нужен (в чем кайф, а)

Ну для запуска Rust тоже не нужен, так что пока не сильно празднуйте )

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

Увидел, что ag добавляет номера строк, что логично и нужно. А sift не делает это по дефолту, поэтому запустив его с опцией -n перформанс просело в два раза. Т.е. в 2.5 раза быстрее ag.

foror ★★★★★
()

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

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

Так что остается вопрос, на чем они еще схитрили, т.к. в реальной ситуации их хитрожопость повылазиет и придется возвращаться к ag.

foror ★★★★★
()

Самый быстрый grep написан на Go

rejit, jrep, grep -P ?

devl547 ★★★★★
()

Так он жи греп пускал без LC_ALL=C. Дитятко неразумное.

anonymous
()

Вся фишка — в использовании стандартного пакета из Go regexp, реализующего матчинг на основе Thompson's NFA. Алгоритм известен давно, отлично зарекомендовал себя, используется в grep и awk. Ну что, умный дядька Томпсон в 1968 году придумал алгоритм, лучше которого нынешним хипстерам придумать не дано.

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

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

Смотрите-ка как получается: у нас есть язык, который позволяет любому хипстеру с пол пинка написать собственный реактивный grep, но тем не менее он по-прежнему говно, потому что я так сказал.

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

Смотрите-ка как получается: у нас есть язык, который позволяет любому хипстеру с пол пинка написать собственный реактивный grep, но тем не менее он по-прежнему говно, потому что я так сказал.

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

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

В таком случае приношу свои извинения за грубость, и на будущее попрошу: лучше говорить что это не конкретно к тому, кому ты ответил, так легче парсить.

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