Ana içeriğe geç
Programlama

Zig derleyicisinin standart kütüphane değişikliği SQLite işlemlerini 12 bin kat yavaşlattı

Öne çıkanlar

  • Zig'in C standart kütüphanesindeki dizgi fonksiyonlarını yeniden yazması SQLite ayrıştırıcısında karesel karmaşıklık oluşturdu.
  • Büyük bir JSON dosyasının SQLite'a aktarılması sırasında işlem süresi 12 bin kat uzadı.
  • Hata yalnızca Zig ile çapraz derlenen Linux ortamında ortaya çıktı.

Geliştirici Dennis Forbes, Rust ve SQLite tabanlı satranç analiz hizmetinde JSON verilerini veritabanına eklerken ciddi bir işlemci darboğazı yaşandığını tespit etti. Yaklaşık 40 bin kaydın eklenmesi milisaniyeler yerine dakikalar sürdü ve tek bir işlemci çekirdeğini tamamen tüketti. Sorunun kaynağı incelendiğinde, çapraz platform derleme sürecinde kullanılan Zig derleyicisinin C standart kütüphanesini yeniden yazma tercihi ortaya çıktı.

Forbes, Linux hedefleri için derleme yaparken cargo-zigbuild ve Zig'in C derleyicisini kullandı. Zig ekibinin musl kütüphanesini saf Zig koduna dönüştürme çalışmaları sırasında strspn, strcspn ve strstr gibi dizgi işleme fonksiyonlarının başına tüm dizgi uzunluğunu ölçen bir adım eklendi. SQLite içindeki ayrıştırıcı metin boyunca ilerleyip boşlukları atlarken her adımda dizginin kalan uzunluğunu baştan hesapladı ve bu durum karesel karmaşıklığa yol açtı.

Oluşan karesel zaman karmaşıklığı nedeniyle 1,2 megabaytlık bir JSON dosyasının SQLite tarafından işlenmesi yaklaşık 12 bin kat yavaşladı. Sorunun Mac üzerinde görülmeyip yalnızca Zig ile derlenen Linux ikililerinde yaşandığı kaydedildi. Forbes, geçici bir önlem olarak JSON verisindeki boşlukları önceden temizlediğini ve ardından derleme hattını Linux kapsayıcılarına taşıdığını bildirdi.

Kaynak

Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.