deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

RealDiff, altı dilde pull request'lere runtime davranış karşılaştırması getiriyor

Yeni bir open-source araç, bir pull request'in iki tarafını da derleyip test çalıştırmalarını izliyor ve her çağrı ağacındaki ilk gerçek davranış değişikliğini, diff'in hiç dokunmadığı dosyalardaki etkiler dahil raporluyor.

RealDiff, altı dilde pull request'lere runtime davranış karşılaştırması getiriyor

RealDiff ne yapıyor

Bir geliştirici, bir kod tabanının iki revizyonunun metinsel diff'inin söylediğine değil, runtime'da gerçekte ne yaptığına göre karşılaştıran open-source bir araç olan RealDiff'ı yayımladı. Hacker News'teki bir Show HN gönderisiyle gündeme gelen proje README'sine göre araç, bir pull request'in base ve önerilen revizyonlarını derliyor, test çalışmalarını enstrümante ediyor ve her çağrı ağacındaki ilk gözlemlenebilir davranış değişikliğini — projenin frontier (cephelike) adını verdiği noktayı — raporluyor. Karşılaştırmadan önce, base revizyonun tekrarlanan çalışmalarından (README genel bakışında üç çalışma) bir gürültü taban çizgisi çıkarıyor; böylece flaky zamanlama varyasyonu regresyon olarak raporlanmak yerine eleniyor.

Onu motive eden örnek

README'nin demosu tek satırlık bir C# refactor'una dayanıyor: List.Sort ile liste sıralayan bir extension method, OrderBy kullanacak şekilde yeniden yazılıyor. List.Sort stabil bir sıralama değildir; OrderBy ise öyledir. Bir altyapı yardımcısındaki bu tek değişiklik, diff'in hiç dokunmadığı ayrı bir projedeki bir fiyatlama motorunu değiştiriyor. Demo çıktısında DiscountEngine.SelectDiscount daha önce "CLEARANCE_40" döndürürken "SEASONAL_15" döndürüyor ve CheckoutTotals.Compute 60 yerine 85 döndürüyor.

Can sıkan ayrıntı şu: değişen yolu çalıştıran üç testten ikisi, bunu yaklayabilecek hiçbir assertion içermiyordu; yani yeşil bir test paketi bu kaymayı işaretlemeyecekti. Yalnızca sıralama yardımcısını değiştiren demo betiği, düzenlenen dosyanın sıfır izlenen üye katkıda bulunduğunu ve raporlanan frontier'ın düzenlenmemiş fiyatlama projesine düştüğünü doğruluyor.

Nasıl inşa edildi

Herkese açık çalıştırılabilir dosya, argüman yönlendirmesini, depo yapılandırmasını ve dil algılamasını üstlenen ince bir Rust başlatıcısı. Ref çözümü, derlemeler, önbellekleme, enstrümantasyon ve sonuç gönderiminden sorumlu kardeş bir managed bileşeni başlatıyor. Desteklenen her runtime'ın kendi tracer'ı var ve her tracer, eşleştirme, gürültü filtreleme, frontier hesaplama ve bulguları işleyen tek geçişli streaming Rust motorunun tükettiği aynı dile nötr NDJSON trace sözleşmesini yayıyor. Sonuçlar, GitHub'a, Azure DevOps'a veya bir MCP sunucusuna gönderilebilen bir findings. dosyasına düşüyor.

README ayrıca altı tracer'ın tamamında conformance gate'ler tarafından zorlanan bir kapsam değişmezini描述iyor: keşfedilen her modül discovered = instrumented + skipped koşulunu, sıfır yama hatasıyla sağlamalı. Amaç, enstrümantasyon boşluklarının sessizce yutulmak yerine kaydedilmesi.

Dil desteği ve belirtilen sınırlar

RealDiff; .NET 8 (Mono.Cecil derleme zamanı IL örme, xUnit), Java (ASM ile java.lang.instrument agent'ı, Maven/Gradle), Node ve TypeScript (CommonJS require hook'u artı Babel ile bir ESM loader; npm, pnpm, Yarn ve Bun desteği), Go (derleme önbelleğine module-farkında AST yeniden yazımı), Rust (içerik adresli derleme önbelleğine syn/quote kaynak yeniden yazımı) ve Python 3.12+ (sahnelenmiş bir sitecustomize.py aracılığıyla süreç başlangıcında bağlanan PEP 669 sys.monitoring; pytest ve unittest kökleri ile) kapsıyor. Proje kendisini erken bir önizleme olarak tanımlıyor.

Sınırlamalar açıkça belgelenmiş. Tip ve sınıf başlatıcıları hem CLR hem JVM'de yapısal olarak gözlemlenemez; çünkü başlatma kilitleri altında çalışan hook'lar başlatmayı kilitleyebilir. Rust makro genişletmeleri ve derleyiciye ait kod stabil kaynak yeniden yazımıyla erişilemez; README, önceki MIR tabanlı bir prototipin sıfır runtime olayı yaydığını not ediyor. Node worker'ları kapsam dışıdır ve tam olarak bir desteklenen lockfile gereklidir. Python'da native ve C çağrılabilirlerinin izlenecek bir Python frame'i yoktur ve 3.12 öncesi sürümler kesin reddedilir. Çözümlenemeyen TypeScript source map'leri, orijinal bir dosya yolunu tahmin etmek yerine düşük atıf güveniyle çözümlenemedi olarak kaydedilir.

Neden önemli

Kod incelemesi bir insanın neyi düzenlediğini gösterir; testler yalnızca assertion'larının kapsadığını doğrular. RealDiff bu ikisi arasındaki boşluğa hedef alıyor: diff'in hiç dokunmadığı, ama her halükârda geçen testlerle çalıştırılan kod yollarındaki davranış değişiklikleri. Frontier çerçevesi ayrıca, çağrı başına yalnızca ilk sapmayı raporlayarak inceleyicileri aşağı yönlü dalga etkilerinde boğmamayı sağlıyor.

Ödünleşim ise hesaplama gücü. İki revizyonu derlemek ve taban çizgisi tekrarları çalıştırmak, hızlı geri bildirim döngülerine değil, zamanı bol CI pipeline'larına uyar; ve tüm düzen, demoda taze süreçler arasında açıkça doğrulanan determinizme dayanıyor. Dille ilgili boşlukları olan erken bir önizleme olarak, en iyi şöyle okunur: inceleme araçlarının metin yerine çalıştırmalar üzerine akıl yürütmesi gerektiğine dair bir bahistir — ve altı runtime'daki conformance gate'leri, bu bahisın yargılanacağı mekanizmadır.

  • #developer-tools
  • #open-source
  • #testing
  • #code-review
  • #runtime-analysis

İlgili yazılar