- Performansın kritik olduğu uygulamalar için C ile yazılmış ultra hızlı bir metin arama aracı
- Desen özellikleri ve donanıma göre en uygun algoritmayı dinamik olarak seçer
- SSE4.2/AVX2 gibi donanımları kullanarak maksimum throughput sağlar
- Büyük ölçek desteği için dosyaları parçalara bölerek çok iş parçacıklı paralel işlem uygular
- Desene göre en uygun arama algoritmasını kullanır
- Boyer-Moore-Horspool: genel desen eşleme için uygundur
- Knuth-Morris-Pratt (KMP) algoritması: kısa desenler için optimize edilmiştir
- Rabin-Karp: uzun desenlerde etkilidir
- SIMD hızlandırma: SSE4.2, AVX2 destekli donanımlarda performansı artırır
- Bellek eşlemeli dosya G/Ç kullanarak sistem çağrılarını en aza indirir ve throughput'u en üst düzeye çıkarır
- Esnek arama seçenekleri
- Büyük/küçük harf duyarlı ve duyarsız arama
- Dosya aramaya ek olarak doğrudan metin içinde arama yapılabilir
- Yalnızca eşleşme sayısını yazdıran mod sunar
Kullanım
krep [OPTIONS] PATTERN [FILE]
- Günlük dosyasında “error” arama:
krep "error" system.log
- Büyük/küçük harf duyarsız, 8 iş parçacığı kullanarak arama:
krep -i -t 8 "ERROR" large_logfile.log
- Eşleşme sayısını yazdırma (eşleşen satırlar yazdırılmaz):
krep -c "TODO" *.c
- Dosya yerine doğrudan bir metin içinde arama:
krep -s "Hello" "Hello world"
Komut satırı seçenekleri
- -i : büyük/küçük harf duyarsız arama
- -c : eşleşen satırları yazdırmadan yalnızca eşleşme sayısını yazdırır
- -t NUM : NUM adet iş parçacığı kullanır (varsayılan: 4)
- -s STRING : dosya yerine metin içinde arama
- -v : sürüm bilgisini yazdırır
- -h : yardım bilgisini yazdırır
Benchmark
krep performansı, yaygın metin arama araçlarıyla karşılaştırıldığında oldukça yüksektir.
- krep, 1GB metin dosyasında genel bir deseni aramak için 0.78 saniye harcadı; bu, saniyede 1,282MB anlamına gelir
- grep aynı iş için 2.95 saniye harcadı ve saniyede 339MB hız kaydetti
- ripgrep ise 1.48 saniye sürdü ve saniyede 676MB hız gösterdi
- →
krep, grep'ten yaklaşık 3.8 kat, ripgrep'ten ise yaklaşık 1.9 kat daha hızlıdır (performans, donanım ve dosya özelliklerine göre değişebilir)
İsmin kökeni
- “krep”, İzlandaca “kreppan” sözcüğünden türetilmiştir
- “hızlıca kavramak” anlamına gelir
- Verimli desen tanımayı simgeler
- Kısa ve sade bir komut olduğu için yazması kolaydır
2 yorum
Regex desteğinden vazgeçip de ripgrep'ten yalnızca 2 kat daha hızlı oluyorsa, kullanım değeri biraz düşük kalıyor.
Ben galiba regex destekli ripgrep'i kullanmaya devam ederim.
Hacker News görüşleri
CPU özellikleri (ör. AVX2) çalışma zamanında algılanmalı
ifdef, yalnızca derleme zamanında derleyicinin bunu destekleyip desteklemediğini algılarkrep projesiyle ilgili blog yazısına giriş
madvise()ile ilgili hata oluşuyor, Makefile'daki CFLAGS'a-D_GNU_SOURCEeklemek gerekiyorTest vakalarının önemi
Derleme sorunları çözüldükten sonraki benchmark sonuçları
Eşleşme sıklığının yüksek olduğu benchmark denemesi
Ek benchmark denemeleri
ripgrep'in algoritması ve bellek eşlemeli kullanım
Benchmark sonuçlarına dair şüpheler
krep adlandırmasına dair görüş