· kaynak Hacker News – Front Page (hnrss.org)
OmniDiff: açık kaynak Rust difftool aracı, Git için 100 ms altında içerik farkında diff sunuyor
Rust ile yazılmış açık kaynak difftool OmniDiff, 100 milisaniye altında diff, kod, görsel, font, arşiv ve PDF'lerde tür farkında işleme, ayrıca git, jj ve editör entegrasyonları vaat ediyor.
Rust ile yazılmış, içerik farkında bir difftool aracı
Rust ile yazılmış açık kaynak bir diff aracı olan OmniDiff, 1 Kasım'da Hacker News'in ana sayfasına çıktı. GitHub'daki proje README'sine göre, araç diff işlemlerini 100 milisaniyenin altında tamamlıyor; bu sayı, Intel Core i7-1370P işlemcili ve 32 GB RAM'li bir ThinkPad T14s üzerinde ölçülmüş ve kod değişikliklerinin yüzde 99,95'ini işliyor. Her dosyayı metin satırları olarak değerlendirmek yerine, işlediği değişikliklerin yüzde 98,8'i için içeriğe özgü bir algoritma seçiyor.
Metin difflerinin ötesinde
Araç dosyaları türlerine göre ayrıştırıyor ve içinde gerçekte neyin değiştiğini raporluyor. README'deki doğruluk tablosu, aralarında yüzde 70 mükemmel ve yüzde 92 mükemmele yakın doğrulukla kod, yüzde 69 ve 91 ile resimler, yüzde 82 ve 100 ile fontlar yer alıyor. PDF'ler her iki doğruluk ölçütünde tam puan alıyor; ancak proje, bu biçimin değerlendirilen test durumlarının ondan az olduğunu, dolayısıyla bu sayının çok küçük bir örnekleme dayandığını belirtiyor. Örnek görseller arasında yalnızca bir kutunun adının değiştiği bir PDF diyagramı, yirmi simgesi yeniden çizilmiş bir web fontu, bir OpenDocument dosyası ve derlenmiş bir çeviri kataloğu var; Unix diff ile yan yana karşılaştırmalar tarayıcıda görüntülenebiliyor. Türü desteklenmeyen ikili dosyalar da, git ve diff(1)'in bastığı tanıdık tek satırlık "dosya farklı" bildirimini alıyor.
Kurulum ve paketleme
Her GitHub sürümüyle birlikte Linux, hem Intel hem Apple Silicon macOS ve Windows için önceden derlenmiş ikili dosyalar sunuluyor. README ayrıca macOS ve Linux için Homebrew, amd64 ve arm64'yü kapsayan Debian ve Ubuntu için imzalı bir apt deposu, bir Nix flake, Arch ve Gentoo için paketleme tarifleri listeliyor. Kaynak koddan cargo ile derleme, rustc 1.92 veya üstünü ve PATH üzerinde bir C derleyicisini gerektiriyor; çünkü her tree-sitter grameri C'den derleniyor. İlk derleme, kısmen fat-LTO release profili nedeniyle birkaç dakika sürüyor.
Git, Jujutsu ve editör entegrasyonu
Temel arayüz, omnidiff komutuna iki dosya geçirilerek açılan bir terminal arayüzü; terminal desteklediğini bildirirse 24 bit renk kullanılıyor. OmniDiff ayrıca, git'i global olarak ya da depo başına yapılandırabilen etkileşimli bir kurulum sihirbazı üzerinden ya da iki manuel git config komutuyla bir git difftool arka ucu olarak kaydoluyor ve hiçbir difftool yapılandırması olmadan da GIT_EXTERNAL_DIFF üzerinden çalışıyor. Bir uyarı: git diff ve git log -p çıktılarını git bir pager'a aktardığı için her zaman etkileşimsiz metin modunda görüntülenir; tam ekran görüntüleyici için git difftool gerekir. Jujutsu (jj), git'in difftool ayarlarını yok sayar ve kendi yapılandırmasını ister; README, OmniDiff iki dizin ağacı yerine dosya çiftlerini diff'lediği için jj'nin dosya bazında çağırma modunun zorunlu olduğunu vurguluyor. Editör tarafında ise, VSCodium, Cursor ve Windsurf için Open VSX'te de yayımlanan bir VS Code uzantısı ve bir Neovim eklentisi var; ancak VS Code'un yerleşik diff görünümünü değiştirmeye yarayan API'si yukarı akışta uygulanmış durumda ama henüz yayımlanmamış.
Bağımsız çıktı ve betikleme
--headless bayrağı (--batch eş anlamlısı) düz metin basıyor ve araç, stdout bir terminal olmadığında bu moda otomatik geçiyor; böylece less'e yöneltme bayrak gerektirmiyor. Metin çıktısı, uzun değişmemiş satır dizilerini katlıyor, varsayılan olarak her değişikliğin çevresinde üç bağlam satırı tutuyor (--context ile değiştirilebilir) ve o satırın ekranda görünmeyeceği durumlarda her parçacıyı içeren fonksiyon, sınıf veya struct etiketiyle işaretliyor; böylece büyük dosyalardaki derin değişiklikler bulunabilir kalıyor. Çıkış kodları diff(1) geleneğini izliyor: başarıda 0, hatada 2; --exit-code ise dosyalar farklıysa ayrıca 1 döndürmenin opt-in yolu. README, sıfırdan farklı çıkış kodlarının sürüm kontrol sistemlerini aracın başarısız olduğuna inandırdığını açıklıyor: jj her dosyada uyarıyor, git difftool ise tüm çalışmayı iptal edebiliyor. --mode json seçeneği, bir diff'i JSON Schema ile belgelenmiş tek bir JSON nesnesi olarak yayıyor. Eşlik eden tarayıcı tabanlı bir kod inceleme aracı 0.0.0 sürümüyle listelenmiş; README, ona güvenilmemesi konusunda uyarıyor.
Neden önemli
Kod incelemesi difflerde yaşar; ancak standart araç zinciri görselleri, fontları, arşivleri ve belgeleri opak kütükler olarak ele alıyor. İçeriği türe göre ayrıştırıp asıl değişikliği — bir diyagramdaki yeniden adlandırılmış kutu ya da bir fontta yeniden çizilmiş simgeler gibi — tanımlayarak OmniDiff, kod ile varlıkları harmanlayan depolarda inceleme döngülerini kısaltabilir; 100 ms altı hedefi de onu bir yenilikten çok günlük bir difftool olarak kullanılabilir kılıyor. Uyarılar gerçek: kıyaslama sayıları tek bir dizüstü bilgisayarda kendi ölçümleri ve PDF doğruluk örneklemi çok küçük. Ama geniş paketleme, git ve jj entegrasyonu, betikleme için JSON çıktısı ve editör eklentileriyle bu, bir konsept kanıtı değil pratik, kurulabilir bir sürüm.
- #rust
- #git
- #open-source
- #developer-tools
- #diff