deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Python 3.14, deneysel JIT configure bayrağını kaldırdı; bayrağı hâlâ geçen derlemeleri bozuyor

CPython'ın deneysel JIT configure bayrağı 3.14'te kaldırıldı; --enable-experimental-jit bayrağını hâlâ geçen derlemeler ve Dockerfile'lar başarısız olacak. Geçiş ise oldukça basit.

Python 3.14, deneysel JIT configure bayrağını kaldırdı; bayrağı hâlâ geçen derlemeleri bozuyor

Python 3.14 artık CPython'ın deneysel just-in-time derleyicisini etkinleştiren configure bayrağını kabul etmiyor ve bayrağı hâlâ geçen her derleme hattı bozulacak. dev.to'da yayımlanan bir yazıya göre, bayrağı 3.14 geliştirme döngüsü sırasında kaldırıldı; çünkü deneysel derleyiciyi sürdürmenin projeye maliyeti, sağladığı mütevazı hız artışından fazlaydı.

Neler kaldırıldı

Python 3.13, derleme sırasında --enable-experimental-jit ile açıkça etkinleştirilmesi gereken deneysel bir copy-and-patch JIT ile geldi. dev.to yazısı, yönlendirme konseyinin (steering council) sunduğu performansa kıyasla bakım yükünün çok yüksek olduğunu değerlendirerek özelliği 3.14 döngüsü sırasında kaldırdığını bildiriyor. Pratik sonuç şu: Bayrağı kullanan configure çağrıları artık doğrudan başarısız oluyor; yani bu bozulma, sessizce gözardı edilen bir durum yerine CI işlerinde ve container derlemelerinde sert bir hata olarak ortaya çıkıyor.

Yükseltmeden önce bayrağı bulun

Yazının ilk önerisi basit bir denetim: Depoda enable-experimental-jit ifadesini shell script'lerinde, Dockerfile'larda ve YAML ile yazılmış CI yapılandırmalarında arayın. Proje kökünde bu dosya desenleriyle sınırlı yinelemeli bir grep, kalan her referansı ortaya çıkarır; yazar da her eşleşmeyi, bir 3.14 derlemesinin başarılı olabilmesi için zorunlu bir düzenleme olarak görüyor. Daha az gözle görünen yerler de önemli; örneğin JIT'in derleme zamanı tanımlarını pyconfig.h içinde yoklayan kod.

Geçiş için iki yol

CPython'ı kaynaktan derlemeye devam etmesi gereken derlemeler için çözüm, JIT bayrağını kaldırıp standart optimize edilmiş yapılandırmayı korumak ve isteğe bağlı olarak --with-lto ile link-time optimization eklemektir. Uzmanlaşmış uyarlanabilir yorumlayıcı varsayılan olarak etkindir ve yazıya göre JIT'in vadettiği hızın büyük kısmını sağlar; LTO ise uzun süre çalışan servisler için çoğu zaman eski JIT'in kazançlarına eşit ya da ondan daha iyi sonuçlar verir.

Kaynaktan derlemenin tek nedeni JIT olan ekipler için önerilen alternatif, Python'ı tamamen derlemeyi bırakıp resmi python:3.13-slim imajına geçmektir. Yazar, bunun tüm builder aşamasını ortadan kaldırdığını, imajdan yaklaşık 300 MB'lık bir azalma sağladığını ve yine de uyarlanabilir yorumlayıcıyı sunduğunu tahmin ediyor.

Öncesi ve sonrasında benchmark alın

Bu takas iş yüküne bağlı olduğu için yazı, eşitlik varsaymak yerine ölçmeyi öneriyor. CPython'ın kendi benchmark paketinin kullandığı araç olan pyperf ile oluşturulmuş küçük bir test düzeneği, bir uygulamanın sıcak fonksiyonlarını eski ve yeni imajlarda zamanlayabilir; böylece medyan sonuçlar karşılaştırılabilir. Çoğu iş yükü için bildirilen fark yüzde 5'in içinde; bundan kötü her durumda, suçu JIT kaldırımına atmadan önce cProfile ile profil çıkarılmalı.

Yazıya göre JIT'in en güçlü olduğu alan, az fonksiyon çağrısı içeren ve tam sayı aritmetiğinin baskın olduğu sıkı döngülerdi. Bu alanda kabul edilemez şekilde geriye giden iş yükleri için doğru yol, gelecekteki bir JIT deneyini beklemek yerine Cython, PyO3 üzerinden Rust ya da düz C gibi derlenmiş bir uzantı kullanmaktır.

Neden önemli

Bu kaldırma işlemi bir performans seçeneğini derleme bozucusuna dönüştürüyor: --enable-experimental-jit bayrağını sabitleyen her pipeline, Dockerfile ve altyapı modülü, 3.14'ü hedeflediği anda başarısız olacak; bu da denetimin yükseltme gelirken değil, gelmeden önce yapılması gerektiği anlamına geliyor. Öte yandan yazı, varsayılan yorumlayıcının JIT'in faydasının büyük kıtasını zaten sunduğunu savunuyor; bu da özel Python derlemelerini sürdürmenin yaygın bir gerekçesini ortadan kaldırıyor ve bunlarla birlikte gelen tedarik zincirini küçültüyor. Buradaki ayrıntılar tek bir dev.to yazısından geliyor; bu nedenle ekipler, geçiş işini planlamadan önce ayrıntıları resmi CPython 3.14 sürüm notlarıyla doğrulamalı.

  • #python
  • #cpython
  • #docker
  • #continuous-integration
  • #performance

İlgili yazılar