« Tüm yayınlar

Microsoft'un tgrep'i: Rust'ta trigram indeksli grep, 52 kata kadar hızlı

Microsoft'un Rust ile yazdığı tgrep, trigram indeksleme ve istemci/sunucu mimarisiyle büyük depolarda ripgrep'e göre 52 kata varan hız sunuyor.

tgrep, Microsoft'un geliştirdiği ve büyük kod tabanlarında regex aramasını hızlandırmak için trigram tabanlı bir indeks ile istemci/sunucu mimarisi kullanan bir Rust aracı. grep ve ripgrep her sorguda tüm dosyaları taradığı için (O(toplam byte)), tgrep bunun yerine önceden bir trigram indeksi kurup yalnızca eşleşme ihtimali olan dosyalara bakıyor. Araç şu anda GitHub Copilot CLI içinde repo aramalarını hızlandırmak için kullanılıyor.

gecko-dev, chromium ve linux gibi büyük depolarda yapılan testlerde tgrep, 18 test senaryosunun 17'sinde ripgrep'i geçiyor; hızlanma bazı durumlarda 52 kata kadar çıkıyor. Tek istisna Linux'ta Kubernetes deposu; burada fark neredeyse sıfıra iniyor. Bir sorgu on binlerce eşleşme döndürdüğünde sonuçları teslim etmenin maliyeti, indeksin sağladığı kazancı gölgede bırakabiliyor.

Mimaride, diskte mmap ile okunan IndexReader ile bellek içi LiveIndex katmanını birleştiren bir HybridIndex bulunuyor; dosya değişiklikleri gerçek zamanlı izleniyor, arka planda paralel bir indeksleyici çalışıyor ve bellek kullanımı belirli aralıklarla diske aktarılarak sınırlı tutuluyor. JSON-RPC tabanlı TCP sunucusu aynı anda birden fazla istemciye hizmet verebiliyor.

tgrep, gerçek dünya repo tuhaflıklarını da açıkça ele alıyor: git deposu olmayan dizinlerde .gitignore kurallarının uygulanmadığını uyararak bildiriyor, büyük/küçük harf duyarsız dosya sistemlerinde git'in core.ignorecase ayarına uyarak yanlış dosya gizlemelerini önlüyor ve index/serve komutlarındaki bayrakların (dosya boyutu sınırı, hariç tutmalar gibi) tutarlı olmasını gerektiriyor; aksi halde dosyalar sessizce indeksten düşebiliyor.

Bu sentez, kaynağından yapay zeka tarafından üretildi; insan editör ya da elle onay adımı yoktur. Nasıl çalışıyoruz