Interpreter Windows x86-64 Python 3.15 diperkirakan sekitar 15% lebih cepat
(fidget-spinner.github.io)- Interpreter tail-calling CPython menunjukkan performa sekitar 15% lebih cepat dibanding metode sebelumnya di lingkungan Windows x86-64
- Peningkatan performa sekitar 5% juga terkonfirmasi di macOS AArch64 (XCode Clang), sementara di Windows memanfaatkan fitur eksperimental MSVC 2026
- Dalam benchmark pyperformance, sebagian besar pengujian menunjukkan peningkatan kecepatan, dan beberapa meningkat hingga 78%
- Penyebab utama peningkatan performa dianalisis berasal dari reset heuristik optimisasi compiler dan peningkatan inlining
- Saat rilis resmi Python 3.15, fitur ini dijadwalkan aktif secara default pada build berbasis Visual Studio 2026
Peningkatan performa interpreter tail-calling
- Interpreter tail-calling CPython diukur sekitar 15% lebih cepat daripada interpreter switch-case yang ada di Windows x86-64
- Berdasarkan pyperformance, rata-rata geometrik meningkat 15~16%
- Beberapa benchmark meningkat hingga 78%, sementara sedikit kasus justru 60% lebih lambat
- Di macOS AArch64 (XCode Clang), terkonfirmasi peningkatan performa sekitar 5%
- Hasil ini berlaku dengan asumsi tidak ada perubahan selama siklus pengembangan Python 3.15
Perbandingan struktur interpreter
- Metode implementasi interpreter berbasis C dibagi menjadi tiga: switch-case, computed goto, dan tail-call threaded
- switch-case: menangani percabangan per instruksi
- computed goto: ekstensi GCC/Clang yang melompat langsung ke alamat percabangan
- tail-call threaded: memisahkan tiap handler bytecode menjadi fungsi, lalu melakukan tail call ke fungsi berikutnya
- Di masa lalu, compiler C tidak menjamin optimisasi tail call sehingga ada risiko stack overflow
- Atribut
__attribute__((musttail))milik Clang dan[[msvc::musttail]]milik MSVC memungkinkan forced tail call
Hasil build MSVC 2026 untuk Windows
- Pada build CPython yang menggunakan fitur eksperimental MSVC, sebagian besar benchmark menunjukkan peningkatan kecepatan
- Contoh hasil:
spectralnorm: 1.48xnbody: 1.35xbm_django_template: 1.18xxdsl: 1.14x
- Contoh hasil:
- Sudah dicerminkan secara resmi dalam dokumen “What’s New” Python 3.15
- Interpreter tail-calling tersedia pada build Visual Studio 2026 (MSVC 18)
- Library Python murni sekitar 15% lebih cepat, skrip kecil hingga 40% lebih cepat
Penyebab peningkatan performa
- Tail calling menginisialisasi ulang heuristik optimisasi compiler, sehingga mendorong pembuatan kode yang lebih efisien
- Loop interpreter CPython sebelumnya tersusun sebagai satu fungsi tunggal sekitar 12.000 baris, sehingga optimisasi inlining sering gagal
- Banyak kasus compiler menolak inlining untuk menghindari pembesaran ukuran kode
- Pada pendekatan tail calling, fungsi dipisah sehingga fungsi sederhana bisa diproses inline
- Sebagai contoh, fungsi sederhana seperti
PyStackRef_CLOSE_SPECIALIZEDdapat di-inline
- Sebagai contoh, fungsi sederhana seperti
- Fenomena yang sama juga dilaporkan pada build PGO (profile-guided optimization)
Cara build dan penggunaan
- Saat ini hanya build dari source yang memungkinkan
- Di lingkungan Visual Studio 2026, build dengan perintah berikut
$env:PlatformToolset = "v145" ./PCbuild/build.bat --tail-call-interp -c Release -p x64 --pgo
- Di lingkungan Visual Studio 2026, build dengan perintah berikut
- Ke depannya, setelah pengembangan Python 3.15 stabil, distribusi binary resmi akan dirilis
1 komentar
Komentar Hacker News
Ini adalah contoh yang menunjukkan perbedaan definisi atribut
musttaildanpreserve_nonedi MSVC dan ClangAtribut ini harus ditempelkan pada deklarator fungsi, dan tidak berfungsi jika diletakkan pada posisi penentu fungsi
Tautan kode terkait
Memberi nuansa seolah Microsoft hanya memberi tahu fitur nonpublik seperti ini kepada proyek yang mereka anggap penting
[[msvc::musttail]]ternyata memang atribut yang terdokumentasi resmiSaya akan memperbarui tulisan blog untuk mencerminkan hal itu
Komentar HN terkait
Setelah membaca tulisannya, menilai pendekatan yang mengutamakan transparansi dan umpan balik cepat ini cukup baik
Akan lebih baik lagi jika ada verifikasi lintas-kompiler atau audit independen, tetapi berkat transparansi penuh dari penulisnya, ini terasa dapat dipercaya
Karena dipublikasikan lebih awal, Nelson menemukan bug Clang 19, sehingga bisa diperbaiki sebelum rilis resmi
Kali ini ada dua peningkatan, yaitu logika dispatch dan inlining, jadi ia lebih percaya diri
MSVC bisa mengubah interpreter switch-case menjadi threaded code dalam kondisi tertentu, tetapi CPython terlalu kompleks sehingga optimisasi itu tidak diterapkan
Sebaliknya, pendekatan tail call memberi penulis kode C lebih banyak kendali
Referensi terkait: syarat threaded code di MSVC, isu terkait forceinline
Dulu optimisasi seperti tail duplication bisa berbeda tergantung penilaian kompiler, tetapi sekarang interpreter bisa langsung mengekspresikan bentuk machine code yang diinginkan
Tautan diskusi sebelumnya
Memilih Python karena ekosistem VS terlalu berat dibanding C#/MAUI
Tkinter terasa merepotkan, Qt punya beban belajar yang besar, jadi menggunakan kombinasi wxGlade + wxPython
Hanya butuh satu dependensi yang bisa dipasang via pip, dan menyukai rasa penggunaan yang Pythonic
Peningkatan runtime Windows ini disambut baik
Membuat UI cepat dengan QtCreator lalu menempelkan logika dengan Python membuat kecepatan pengembangan sangat tinggi
Tidak seperti Tkinter atau Qt yang memakai retained mode, ini memakai pendekatan immediate mode, sehingga sangat berguna terutama untuk tooling internal
Proyek imgui_bundle
Ia mengatakan sempat mengira ini pasti sudah ditulis dalam assembly untuk ISA utama
[[msvc::musttail]]adalah atribut baru yang ditambahkan di MSVC 14.50 (dirilis bulan lalu), dan tim CPython berhasil memakainya untuk meningkatkan performa hanya dalam beberapa mingguDokumentasi MSVC musttail
Guido memprioritaskan kesederhanaan kode, sehingga adopsi JIT terlambat, lalu muncul upaya seperti PEP 744 (JIT Compilation)
Optimisasi assembly adalah mimpi buruk dalam pemeliharaan, dan bottleneck Python yang sebenarnya adalah sistem packaging
PyPy cepat berkat JIT, tetapi tidak kompatibel dengan ekstensi C
Model threading Python juga membuat optimisasi lebih sulit
Sebaliknya, JS sederhana karena single-threaded
Python bisa mengakali banyak hal lewat ekstensi C, sehingga tekanan untuk mengoptimalkan CPython sendiri lebih kecil
Selain itu, CPython tidak bisa merusak kompatibilitas karena memiliki ekosistem ekstensi C yang sangat besar
Sebaliknya, V8 bisa bebas mengubah struktur internalnya
Selain itu, karena harus mempertahankan ABI C yang stabil, JIT sulit menganalisis kode dengan bebas
Disebut juga kasus PyPy yang kesulitan menyesuaikan diri dengan batasan-batasan itu
Selain itu, JS cukup mendukung JS murni, sementara Python harus mempertahankan ekosistem ekstensi eksternal sehingga optimisasinya lebih terbatas
Ia berbagi bahwa dirinya pernah mengukur performa pustaka JS dengan
mitataPR optimisasi Immer JS
Penjelasan Wikipedia, contoh Matplotlib
Plot ini memvisualisasikan distribusi secara simetris, tetapi ada kritik bahwa smoothing dapat mendistorsi distribusi nyata dan juga boros ruang
Dalam diskusi HN, ada juga pendapat bahwa half-violin plot lebih baik
Contoh gambar
Ia menyindir ciri khas tulisan AI (paragraf pendek, nada terlalu positif, kurang mendalam, dan sebagainya)