- CPython'ın tail-calling yorumlayıcısı, Windows x86-64 ortamında mevcut yönteme göre yaklaşık %15 daha hızlı performans gösteriyor
- macOS AArch64 (XCode Clang) üzerinde de yaklaşık %5'lik bir performans artışı doğrulandı; Windows tarafında ise MSVC 2026'nın deneysel özelliği kullanılıyor
- pyperformance benchmark'larında testlerin çoğunda hız artışı görüldü ve bazıları en fazla %78'e kadar iyileşti
- Performans artışının ana nedeninin derleyici optimizasyon sezgisellerinin sıfırlanması ve inlining iyileştirmeleri olduğu düşünülüyor
- Python 3.15'in resmi sürümünde, Visual Studio 2026 tabanlı derlemelerde varsayılan olarak uygulanması planlanıyor
Tail-calling yorumlayıcısında performans iyileşmesi
- CPython'ın tail-calling yorumlayıcısının, mevcut switch-case yorumlayıcısından Windows x86-64 üzerinde yaklaşık %15 daha hızlı olduğu ölçüldü
- pyperformance'a göre geometrik ortalamada %15~16 iyileşme
- Bazı benchmark'larda en fazla %78 hız artışı görülürken, az sayıda durumda %60 yavaşlama görüldü
- macOS AArch64 (XCode Clang) üzerinde yaklaşık %5'lik performans artışı doğrulandı
- Bu sonuçlar, Python 3.15 geliştirme döngüsü sırasında değişiklik yapılmaması varsayımıyla geçerli
Yorumlayıcı yapılarının karşılaştırılması
- C tabanlı yorumlayıcı uygulama yöntemleri üçe ayrılıyor: switch-case, computed goto, tail-call threaded
- switch-case: komut bazında dallanma işlemi
- computed goto: GCC/Clang genişletmesiyle, dallanma adresine doğrudan atlama
- tail-call threaded: her bytecode işleyicisini ayrı bir fonksiyona bölüp bir sonrakine tail call yapmak
- Geçmişte C derleyicileri tail call optimizasyonunu garanti etmediği için stack overflow riski vardı
- Clang'ın
__attribute__((musttail)) ve MSVC'nin [[msvc::musttail]] niteliği sayesinde zorunlu tail call mümkün hale geldi
Windows için MSVC 2026 derleme sonuçları
- MSVC'nin deneysel özelliğiyle derlenen CPython'da benchmark'ların çoğunda hız artışı görüldü
- Örnek sonuçlar:
spectralnorm: 1.48 kat
nbody: 1.35 kat
bm_django_template: 1.18 kat
xdsl: 1.14 kat
- Python 3.15'in “What’s New” belgesine resmi olarak yansıdı
- Visual Studio 2026 (MSVC 18) derlemelerinde tail-calling yorumlayıcısı kullanılabilecek
- Saf Python kütüphanelerinde yaklaşık %15, küçük script'lerde ise en fazla %40 hız artışı
Performans artışının nedenleri
- Tail calling, derleyicinin optimizasyon sezgisellerini sıfırlayarak daha verimli kod üretimini teşvik ediyor
- Mevcut CPython yorumlayıcı döngüsü yaklaşık 12.000 satırlık tek bir fonksiyondan oluşuyor ve bu da inlining optimizasyonunun sık sık başarısız olmasına yol açıyor
- Derleyici, kod boyutunun büyümesini önlemek için birçok durumda inlining'i reddediyor
- Tail-calling yaklaşımında fonksiyonlar ayrıldığı için basit fonksiyonlar inline işlenebiliyor
- Örneğin
PyStackRef_CLOSE_SPECIALIZED gibi basit bir fonksiyon inline edilebiliyor
- PGO (profil tabanlı optimizasyon) derlemelerinde de aynı durum raporlandı
Derleme ve kullanım yöntemi
- Şu anda yalnızca kaynak koddan derleme mümkün
- Python 3.15 geliştirmesi istikrara kavuştuğunda resmi ikili dağıtım yapılması planlanıyor
1 yorum
Hacker News yorumları
MSVC ile Clang’ın
musttailvepreserve_noneöznitelik tanımlarındaki farkı gösteren bir örnekBu özniteliklerin fonksiyon bildirimine eklenmesi gerekiyor; fonksiyon belirteci konumunda çalışmıyorlar
İlgili kod bağlantısı
Microsoft’un bu tür resmî olmayan özellikleri yalnızca önemli gördüğü projelere bildirdiği izlenimini veriyor
[[msvc::musttail]]aslında resmî olarak belgelenmiş bir öznitelikmişBlog yazısını buna göre düzelteceğim
İlgili HN yorumu
Yazıyı okuyunca, şeffaflık ve hızlı geri bildirimi önceleyen yaklaşımın makul olduğuna karar vermiş
Çapraz derleyici doğrulaması ya da bağımsız denetim olsa daha da iyi olurdu ama yazarın tam şeffaflığı sayesinde buna güvenebildiğini söylüyor
Erken paylaşıldığı için Nelson Clang 19 hatasını bulabildi ve böylece resmî sürümden önce düzeltilebildi
Bu kez hem dispatch mantığı hem de inlining tarafında iki iyileştirme olduğu için daha emin
MSVC bazı koşullarda switch-case yorumlayıcısını threaded code’a dönüştürebiliyor ama CPython fazla karmaşık olduğu için bu optimizasyon uygulanmıyor
Bunun yerine tail call yaklaşımı, C kodunu yazan kişiye daha fazla denetim sağlıyor
İlgili başvurular: MSVC threaded code koşulları, forceinline ile ilgili sorun
Geçmişte tail duplication gibi optimizasyonlar derleyicinin kararına göre değişirdi; artık yorumlayıcı istediği makine kodu biçimini doğrudan ifade edebiliyor
Önceki tartışma bağlantısı
C#/MAUI yerine VS ekosistemi fazla ağır olduğu için Python’u seçmiş
Tkinter’ı kullanışsız bulmuş, Qt’nin de öğrenme yükü yüksek geldiğini söyleyerek wxGlade + wxPython ikilisini kullandığını belirtiyor
Yalnızca pip ile kurulabilen tek bir bağımlılık gerektiğini ve Pythonic kullanım hissini sevdiğini ekliyor
Windows çalışma zamanı iyileştirmesini memnuniyetle karşılıyor
QtCreator ile arayüzü hızlıca hazırlayıp Python’la mantığı ekleyince geliştirme çok hızlanıyor
Tkinter veya Qt gibi retained mode değil, immediate mode yaklaşımı kullandığı için özellikle iç araçlarda çok faydalı
imgui_bundle projesi
Başlıca ISA’lar için assembly ile yazılmış olmasını beklediğini söylüyor
[[msvc::musttail]], MSVC 14.50’ye geçen ay eklenmiş yeni bir öznitelik ve CPython ekibi bunu birkaç hafta içinde kullanarak performans artışı sağlamışMSVC musttail belgesi
Guido kod sadeliğini öncelediği için JIT’in gelişi gecikti; daha sonra PEP 744 (JIT Compilation) gibi girişimler ortaya çıktı
Assembly optimizasyonu bakım kabusudur ve Python’daki asıl darboğazın paketleme sistemi olduğu ekleniyor
PyPy JIT sayesinde hızlı fakat C eklentileriyle uyumlu değil
Python’un threading modeli de optimizasyonu zorlaştırıyor
Buna karşılık JS tek iş parçacıklı olduğu için daha basit
Python, C eklentileriyle darboğazları aşabildiğinden CPython’un kendisini optimize etme baskısı daha düşük kalmış
Ayrıca CPython, devasa C eklenti ekosistemi yüzünden uyumluluğu bozamıyor
V8 ise iç yapısını daha serbest biçimde değiştirebildi
Ayrıca kararlı bir C ABI korunmak zorunda olduğundan, JIT’in kodu özgürce analiz etmesi zorlaşıyor
PyPy’nin bu kısıtlarla başa çıkarken yaşadığı zorluk örnek gösteriliyor
Ayrıca JS yalnızca saf JS’yi desteklese yeterliyken, Python dış eklenti ekosistemini de korumak zorunda olduğundan optimizasyon alanı daha dar
Kendisinin
mitataile JS kütüphane performansı ölçtüğünü de paylaşıyorImmer JS optimizasyon PR’ı
Wikipedia açıklaması, Matplotlib örneği
Dağılımı simetrik biçimde görselleştiriyor ama yumuşatma gerçek dağılımı çarpıtabilir; ayrıca alan israfı olduğu yönünde eleştiriler de var
HN tartışmasında half-violin plot’un daha iyi olduğu da savunulmuş
Örnek görsel
AI yazılarının tipik özellikleriyle (kısa paragraflar, aşırı olumlu ton, derinlik eksikliği vb.) dalga geçiyor