2 puan yazan GN⁺ 2025-10-19 | 1 yorum | WhatsApp'ta paylaş
  • ripgrep 15.0, hata düzeltmeleri, performans iyileştirmeleri ve yeni özellikler gibi çeşitli güncellemeler içeren büyük bir sürümdür
  • gitignore kurallarının uygulanması ile ilgili çok sayıda hata düzeltildi ve büyük dosyalar işlenirken bellek optimizasyonu yapıldı
  • Windows aarch64 platformu desteği eklendi ve powerpc64 desteği sonlandırıldı
  • Yeni özellikler arasında --json ile replace bayrağının eşzamanlı desteği, glob'larda iç içe süslü parantez desteği yer alıyor
  • Genel performans iyileştirmeleri, hata düzeltmeleri ve kullanılabilirlik artışlarıyla geliştirici üretkenliği yükseliyor

ripgrep 15.0 genel bakış

ripgrep 15.0, ripgrep'in en yeni büyük sürümüdür ve başlıca hata düzeltmeleri, küçük performans artışları ve sınırlı sayıda yeni özellik içerir

ripgrep, geçerli dizinde düzenli ifade kalıplarını satır bazında özyinelemeli olarak arayan bir araçtır
Varsayılan olarak gitignore kurallarını izler ve gizli dosya/dizinleri ile ikili dosyaları otomatik olarak atlar

Başlıca değişiklikler

  • Birden fazla gitignore eşleştirme hatası düzeltildi
    • Üst dizinlerdeki gitignore kurallarının uygulanmasıyla ilgili sık bildirilen bir hata giderildi
  • Çok büyük gitignore dosyaları işlenirken ortaya çıkan artan bellek kullanımı hatası çözüldü
  • rg -vf file komutunda file boş olduğunda artık her şey eşleşiyor
  • -r/--replace bayrağı artık --json ile birlikte düzgün çalışıyor
  • Bazı Jujutsu (jj) depoları da git deposu gibi algılanıyor; böylece ripgrep, jj'nin gitignore kurallarını izliyor
  • Glob'lar iç içe süslü parantezleri destekliyor

Platform desteği

  • Windows için aarch64 sürüm ikilileri artık sağlanıyor
  • powerpc64 için sürüm ikilileri artık sağlanmıyor
    • CI sürüm iş akışı sorunları nedeniyle durduruldu; test ve desteğin geri gelmesi istenirse talep edilebilir
  • ripgrep ikilileri LTO (tam bağlama zamanı optimizasyonu) ile derleniyor; bu da küçük performans artışı ve boyut küçülmesi sağlıyor

Performans iyileştirmeleri

  • Windows üzerinde -z/--search-zip seçeneği kullanılmadığında yardımcı ikili aramasının devre dışı bırakılması ile performans artırıldı
  • Windows'ta hiperlink çıktısında yol normalizasyonunun atlanması sayesinde hız artışı sağlandı
  • -A/--after-context kullanılırken büyük değerlerin işlenmesinde performans iyileştirildi

Hata düzeltmeleri

  • Üst dizin gitignore kurallarının uygulanmaması dahil olmak üzere çok sayıda gitignore sorunu düzeltildi
  • Boş dosya hedefleyen rg -vf file komutu artık her şeyle eşleşecek şekilde düzeltildi
  • .gitignore gibi dosyalarda UTF-8 BOM işaretinin yok sayılması eklendi
  • Büyük gitignore dosyaları işlenirken bellek kullanımı optimize edildi
  • --stats kullanıldığında aranan bayt sayısının yanlış gösterilmesi düzeltildi
  • . ile biten glob'ların işlenmesindeki hata giderildi
  • -m/--max-count ile -U/--multiline birlikte kullanıldığında eşleşme sınırı aşımı gösterimi sorunu çözüldü
  • -r/--replace bayrağı kullanıldığında satır sonlandırıcılarının korunması sağlandı
  • -q --files-without-match birleşiminde çıkış kodunun ters dönmesi hatası düzeltildi
  • -c/--count ile --files-with-matches arasındaki belge uyumsuzluğu giderildi
  • Büyük düzenli ifadeler ve girdilerle nadiren görülen panic sorunu düzeltildi
  • Man sayfasındaki seçenek bayrağı adlarında tire kaçışlama düzeltildi
  • macOS aarch64 sürümünde PCRE2 statik derleme işlemi düzenlendi
  • Beyaz listeye alınmış gizli dosya aramalarında üst dizin yoksayma filtresi hatası düzeltildi
  • --json bayrağı kullanılırken hatalı özet istatistikleri sorunu giderildi
  • Mutlak yollar ve genel gitignore aramalarında gitignore işleme hatası düzeltildi
  • -U/--multiline ile -r/--replace birlikte kullanıldığında oluşan panic sorunu düzeltildi

Özellik iyileştirmeleri

  • Varsayılan dosya türü kümesi büyük ölçüde genişletildi ve iyileştirildi
  • -r/--replace, --json ile uyumlu olacak şekilde geliştirildi
  • fish shell tamamlama özelliği artık ripgrep yapılandırma dosyasını yansıtıyor
  • --color için kullanılabilen stil niteliklerine italic eklendi
  • .jj dizini git deposu gibi ele alınıyor
  • Çok iş parçacıklı kullanımda, CLI'de belirtilen dosya sırasına göre aramayı zamanlama özelliği eklendi
  • Windows için aarch64 sürüm artifaktları eklendi
  • highlight renk türü eklendi; böylece eşleşen satırlardaki eşleşmeyen metin stillendirilebiliyor
  • globs ve globset crate'ine iç içe alternates özelliği eklendi
  • --hyperlink-format otomatik tamamlama özelliği bash, fish ve zsh için iyileştirildi

1 yorum

 
GN⁺ 2025-10-19
Hacker News görüşü
  • ripgrep son yıllarda bana gerçekten çok zaman kazandıran bir araç oldu; her yeni sisteme başlarken ilk kurduğum vazgeçilmez araçlardan biri, özellikle eski kod tabanlarını gezerken onsuz olmuyor. Tek küçük hayal kırıklığım, -F (literal olarak ele al) seçeneğini kullanırken bile bazı karakterlerin hâlâ kaçış gerektiren özel karakter gibi davranmasıydı; tam olarak hangileri olduğunu hatırlamıyorum. Yine de ripgrep’in güncellenmeye devam ettiğini görmek her zaman sevindirici.

    • Sorun yaşadığınız karaktere bir örnek verebilirseniz daha somut açıklayabilirim. -F/--fixed-strings, desendeki düzenli ifade özelliklerini %100 kapatır ve her şeyi yalnızca literal olarak işler. Kaçış gerekiyorsa, sebep büyük ihtimalle shell’in bunu istemesidir.
  • rg adeta büyü gibi hissettiren bir araç. Gerçekte ise olağanüstü mühendisliğin, sürekli iyileştirmenin ve hepimizin her gün kullandığı muazzam donanım gücünden sonuna kadar yararlanmanın sonucu. Ayrıca lsp gibi ayrı standartlar oluşturmaya gerek kalmadan geliştiricilerin kodu daha hızlı gezip anlamasını mümkün kılan bir yenilik.

    • smithing kelimesinin bu bağlamda tam olarak ne anlama geldiğini gerçekten merak ediyorum.
  • ripgrep kod tabanı, “içeceğini hazırlayıp en rahat koltuğa oturarak yüksek kaliteli yazılım okumak” hissinin en iyi örneklerinden biri. Kodun içinde oradan oraya tıklayıp hayran kalıyorsunuz.

  • fd gibi rg de kullanması gerçekten keyif veren bir komut satırı aracı. Bu tür yeni nesil komut tabanlı araçları seviyorum.

    • Yakın zamanda ripgrep ve fd yazarlarının Astral’da çalıştığını öğrendim. Astral yazılımlarının neden bu kadar iyi olduğunu şimdi daha iyi anlıyorum.
    • Her iki araç da neredeyse hiç seçenek vermeden, varsayılanlarıyla zamanın %99’unda tam istediğim gibi çalışıyor. Müthiş bir zaman tasarrufu. Örneğin yalnızca rg <string> veya fd <string> yazmak çoğu zaman yeterli.
  • Benim şahsen eklenmesini istediğim özellik bir “uzantı” bayrağı. -g gibi çalışır ama verilen argümanı uzantı olarak yorumlar (örneğin rg -e c,h gibi). Çünkü glob desenlerini kullandığım çoğu durumda amaç uzantı eşleştirmesi oluyor.

    • -t/--type bayrağını görüp görmediğinizi sormak istiyorum; örneğinizdeki gibi -tc kullanılabiliyor. ripgrep’te hazır olmayan bir uzantıysa, kendi type tanımınızı da yapabilirsiniz.
  • ripgrep, Rust’a ilgi duymaya başlamamın başlıca sebeplerinden biriydi. O kadar düzgün çalışıyordu ki Rust ile yazılmış olduğunu öğrenince daha da meraklandım. Aradan yıllar geçti, hâlâ her gün rg kullanıyorum.

    • nibbles, benim QBasic’e ilgi duymamın başlıca sebebiydi. O kadar iyi yapılmıştı ki QBasic ile yazılmış olması ilgimi çekmişti; bu sayede nibbles’ı da her gün kullanır oldum.
  • Yakın zamanda --replace seçeneğini keşfettim ve oldukça etkilendim. --type ile birlikte kullanırken, daha önce böyle güzel özelliklerin varlığından habersiz olmama hayıflandım. Bundan sonra sürüm notlarını daha dikkatli okuyup yeni özellikleri daha yakından takip etmeyi düşünüyorum. jj ile entegrasyonun gelişmesi de sevindirici.

  • Harika bir araç olmasının yanında kullanımı da çok kolay. İlk başta Linux’ta kullanmaya başladım, şimdi Windows’ta da kullanıyorum. Bu araç sayesinde artık wildcard yerine doğrudan düzenli ifadeleri aramada kullanıyorum.

    • Varsayılan grep’ten daha iyi ve rg --files komutu da kullanışlı.
  • Bu hafta, ripgrep’i yalnızca git’in izlediği dosyalarda çalıştıran bir bash fonksiyonu yazdım.

      rgg() {
        readarray -d '' -t FILES < <(git ls-files -z)
        rg "${@}" "${FILES[@]}"
      }
    

    Çok sayıda binary dosya veya dot dosyası bulunan dizinlerde çok daha hızlı arama yapılabiliyor. Dot dosyalarını aramak için -uu gerekiyor ama bu seçenek binary dosyaları da aramaya katıyor. Dosya sayısı yüzleri bulunca git ls-files da kendi başına yavaşlamaya başlıyor.

    • Bunu yaptığınızda gerçekten daha hızlı olduğu somut bir örnek var mı, merak ettim. Normalde ripgrep zaten gitignore kurallarına saygı duyduğu için git ls-files ile benzer davranır. Bu arada -uu, ripgrep’e gitignore ve hidden dosyaları yok saymasını söyler, ama binary dosyaları yine de atlar. Binary dosyaları da dahil etmek için -uuu gerekir. Fonksiyondaki en büyük sorun ise Linux çekirdeği deposunda çalıştırınca “argument list too long” hatası vermesi; bu yüzden xargs ile denedim.
        $ git ls-files -z | time xargs -0 rg APM_RESUME
        ...
      
        real  0.638
        user  0.741
        sys   1.441
        maxmem 29 MB
        faults 0
        $ time rg APM_RESUME
        ...
      
        real  0.097
        user  0.399
        sys   0.588
        maxmem 29 MB
        faults 0
      
      Böyle bir durumda git ls-files -z | xargs -0 rg ... komutunun düz rg ... komutundan daha hızlı olduğu bir örneğiniz varsa paylaşmanızı isterim.
    • Bu yorumu yazdıktan sonra kılavuzu tekrar okuyunca -uu yerine -. bayrağını kullanabileceğimi fark ettim; bu yalnızca hidden dosyaları arıyor. Git’in izlediği hidden dosyaları arayabilmek güzel olurdu ama dosya listesini sorgulamanın getirdiği ek yük, Rust ile yazılmış olsa bile göz ardı edilecek gibi değil.
    • Ben mi bir şeyi kaçırıyorum bilmiyorum ama ripgrep normalde git tarafından izlenmeyen dosyaları zaten varsayılan olarak yok saymıyor mu?
    • Bunun git grep’ten daha hızlı olup olmadığını merak ediyorum.
  • İşte her gün ripgrep kullanıyorum; hem komut satırında hem de VSCode’da arama yaparken sürekli elimin altında. burntsushi’ye teşekkürler.