Pengkompil Just-In-Time (JIT) eksperimental Python telah menghadapi halangan besar. Selepas dua tahun pembangunan, JIT sering berjalan lebih perlahan daripada penterjemah biasa Python , menimbulkan persoalan tentang hala tuju masa depan projek ini dan menyerlahkan cabaran mengoptimumkan bahasa pengaturcaraan dinamik.
Projek CPython JIT bermula dengan harapan tinggi untuk mempercepatkan pelaksanaan kod Python secara ketara. Walau bagaimanapun, analisis terkini menunjukkan bahawa apabila menggunakan pengkompil moden seperti Clang 20 , penterjemah secara konsisten mengatasi prestasi JIT . JIT hanya mencapai tahap setara apabila penterjemah sengaja dilemahkan dengan menggunakan pengkompil lama yang kurang cekap seperti GCC 11 .
Garis Masa Pembangunan CPython JIT
- 2022-2023: Pembangunan JIT awal bermula
- Python 3.13: JIT dikeluarkan sebagai ciri eksperimen, sering kali lebih perlahan daripada penterjemah
- Python 3.14: Tumpuan kepada pengembangan analisis jenis dan pembinaan komuniti, peningkatan pengoptimum yang minimum
- Python 3.15+: Pengoptimuman yang dirancang termasuk penyahkotakan int/float, peningkatan peruntukan daftar, sokongan free-threading
![]() |
---|
Catatan blog ini merefleksikan perjuangan prestasi dan pengajaran yang dipelajari daripada dua tahun pembangunan pengkompil JIT CPython |
Semakan Realiti Prestasi
Angka-angka menunjukkan cerita yang menyedihkan. Dalam ujian penanda aras, JIT menunjukkan keputusan bercampur-campur yang bercanggah dengan laporan optimistik awal. Walaupun sesetengah beban kerja seperti penanda aras Richards melihat peningkatan kelajuan sebanyak 15%, yang lain mengalami kelembapan yang ketara. Penanda aras nbody , sebagai contoh, berjalan 13% lebih perlahan dengan JIT diaktifkan, dan spectral_norm menunjukkan penurunan prestasi sebanyak 6%.
Prestasi yang tidak konsisten ini berpunca daripada batasan semasa JIT . Versi 3.14 mengandungi hampir tiada penambahbaikan pengoptimum utama berbanding keluaran 3.13, sebaliknya memfokuskan pada meluaskan liputan analisis jenis dan membina kepakaran penyumbang. Pasukan pembangunan mengutamakan pembinaan komuniti dan pemindahan pengetahuan berbanding keuntungan prestasi segera.
Perbandingan Penanda Aras Prestasi ( CPython 3.14 )
Penanda Aras | JIT Dimatikan | JIT Dihidupkan | Perubahan Prestasi |
---|---|---|---|
Richards | 44.5ms ± 0.5ms | 37.8ms ± 2.4ms | +15% lebih pantas |
Nbody | 91.8ms ± 3.5ms | 104ms ± 2ms | -13% lebih perlahan |
Spectral_norm | 90.6ms ± 0.7ms | 96.0ms ± 0.7ms | -6% lebih perlahan |
Konfigurasi ujian: Ubuntu 22.04 , Clang 20.1.7 , PGO=true, LTO=thin
Cabaran Bahasa Dinamik
Python menghadapi halangan pengoptimuman yang unik berbanding bahasa dinamik lain. Perbincangan komuniti mendedahkan bahawa model objek Python , yang sering digambarkan sebagai segala-galanya adalah dict dengan kunci rentetan, mewujudkan halangan prestasi asas. Tidak seperti JavaScript , yang telah mendapat manfaat daripada pelaburan korporat yang besar dan keputusan reka bentuk yang mesra pengoptimuman, seni bina Python menjadikan kompilasi JIT amat mencabar.
Perbandingan dengan pengkompil YJIT Ruby amat memberitahu. Ruby mencapai peningkatan prestasi yang ketara dengan pasukan yang lebih kecil, sebahagiannya kerana semantik Ruby lebih sejajar dengan teknik pengoptimuman JIT sedia ada yang dibangunkan untuk bahasa seperti Smalltalk . API C yang luas dan komitmen Python terhadap keserasian ke belakang seterusnya merumitkan usaha pengoptimuman.
Model dalaman objek terlalu berat sebagaimana adanya. Oleh itu, menghapuskan jenis overhed yang dihapuskan oleh JIT tidak akan membantu kerana itu bukan perkara yang CPU habiskan banyak masa ketika menjalankan CPython.
Pembangunan Komuniti vs Korporat
Perjuangan projek ini menyerlahkan cabaran yang lebih luas dalam pengoptimuman prestasi sumber terbuka. Walaupun Google mencurahkan sumber besar-besaran untuk menjadikan JavaScript pantas melalui V8 , dan Shopify berjaya membiayai pembangunan YJIT Ruby , JIT Python bergantung terutamanya pada sukarelawan komuniti dan sokongan korporat yang terhad. Pasukan Faster CPython Microsoft , yang memberikan sokongan ketara, menghadapi pemberhentian yang mengurangkan kepakaran yang tersedia.
Pasukan pembangunan mengakui cabaran ini sambil kekal optimistik tentang penambahbaikan masa depan. Mereka telah berjaya membina komuniti penyumbang sekitar JIT , dengan beberapa pembangun kini bekerja pada komponen yang berbeza. Pendekatan yang didorong komuniti ini mengutamakan kemampanan jangka panjang berbanding keuntungan prestasi segera.
Memandang ke Hadapan
Walaupun terdapat batasan semasa, CPython JIT belum bersedia untuk bersara. Pasukan telah mengenal pasti beberapa peluang pengoptimuman yang boleh memberikan peningkatan kelajuan yang bermakna dalam Python 3.15 . Ini termasuk unboxing integer dan float, peruntukan daftar yang lebih bijak, dan integrasi yang lebih baik dengan sokongan free-threading Python .
Projek ini berfungsi sebagai pengalaman pembelajaran yang berharga tentang kerumitan mengoptimumkan bahasa dinamik. Walaupun matlamat prestasi masih sukar dicapai, JIT telah menjadi alat pendidikan yang membantu pendatang baru memahami teknik pengoptimuman pengkompil. Sama ada nilai pendidikan ini mewajarkan pelaburan berterusan kekal sebagai persoalan terbuka ketika komuniti Python menimbang kos dan faedah meneruskan kompilasi JIT .
Kisah CPython JIT menggambarkan bahawa menjadikan bahasa dinamik pantas memerlukan lebih daripada niat baik dan kemahiran teknikal. Ia memerlukan keputusan seni bina asas, sumber yang besar, dan kadangkala pertukaran yang sukar antara keserasian dan prestasi.
Rujukan: Reflections on 2 years of CPython's JIT Compiler: The good, the bad, the ugly