Mengapa PyPy tidak dimasukkan ke dalam Python standar?

165

Saya melihat PyPy dan saya bertanya-tanya mengapa itu tidak diadopsi ke dalam distribusi Python arus utama. Bukankah hal-hal seperti kompilasi JIT dan jejak memori yang lebih rendah sangat meningkatkan kecepatan semua kode Python?

Singkatnya, apa kelemahan utama PyPy yang membuatnya tetap menjadi proyek yang terpisah?

KLee1
sumber
4
Selain itu, pypy belum memiliki dukungan untuk numpy. morepypy.blogspot.ch/2012/09/numpy-on-pypy-status-update.html
rthiago
Dan dukungan numpy hanya menggores permukaan aplikasi komputasi ilmiah apa yang akan diperlukan sebelum beralih ke PyPy. Berikut adalah beberapa pemikiran yang meyakinkan dari penulis asli numpy: technicaldiscovery.blogspot.com/2011/10/…
Stuart Berg
3
Saya pikir jawaban dan komentar ini sudah ketinggalan zaman
Marlon Abeykoon

Jawaban:

249

PyPy bukan fork dari CPython, jadi itu tidak akan pernah bisa langsung digabung menjadi CPython.

Secara teoritis komunitas Python dapat secara universal mengadopsi PyPy, PyPy dapat dijadikan implementasi referensi, dan CPython dapat dihentikan. Namun, PyPy memiliki kelemahannya sendiri:

  • CPython mudah diintegrasikan dengan modul Python yang ditulis dalam C, yang secara tradisional cara aplikasi Python menangani tugas-tugas intensif CPU (lihat misalnya proyek SciPy).
  • Langkah kompilasi JP PyPy itu sendiri menghabiskan waktu CPU - hanya dengan menjalankan berulang-ulang kode terkompilasi yang secara keseluruhan menjadi lebih cepat. Ini berarti waktu startup bisa lebih tinggi, dan karena itu PyPy tidak seefisien untuk menjalankan kode lem atau skrip sepele.
  • Perilaku PyPy dan CPython tidak identik dalam semua hal, terutama dalam hal "detail implementasi" (perilaku yang tidak ditentukan oleh bahasa tetapi masih penting pada tingkat praktis).
  • CPython berjalan pada lebih banyak arsitektur daripada PyPy dan telah berhasil diadaptasi untuk dijalankan dalam arsitektur tertanam dengan cara yang mungkin tidak praktis untuk PyPy.
  • Skema penghitungan referensi CPython untuk manajemen memori bisa dibilang memiliki dampak kinerja yang lebih dapat diprediksi daripada berbagai sistem GC PyPy, meskipun ini tidak selalu benar dari semua strategi "GC murni".
  • PyPy belum sepenuhnya mendukung Python 3.x, meskipun itu adalah item pekerjaan aktif.

PyPy adalah proyek yang hebat, tetapi kecepatan runtime pada tugas-tugas yang intensif CPU bukanlah segalanya, dan dalam banyak aplikasi itu adalah yang paling tidak menjadi perhatian. Sebagai contoh, Django dapat berjalan di PyPy dan itu membuat templating lebih cepat, tetapi driver basis data CPython lebih cepat dari PyPy; pada akhirnya, implementasi mana yang lebih efisien tergantung pada di mana hambatan dalam aplikasi yang diberikan.

Contoh lain: Anda akan berpikir PyPy akan bagus untuk gim, tetapi sebagian besar strategi GC seperti yang digunakan di PyPy menyebabkan kegugupan yang nyata. Untuk CPython, sebagian besar hal-hal permainan intensif CPU diturunkan ke perpustakaan PyGame, yang PyPy tidak dapat mengambil keuntungan karena PyGame terutama diimplementasikan sebagai ekstensi C (meskipun lihat: pygame-cffi). Saya masih berpikir PyPy bisa menjadi platform hebat untuk permainan, tetapi saya belum pernah melihatnya benar-benar digunakan.

PyPy dan CPython memiliki pendekatan yang sangat berbeda untuk pertanyaan desain mendasar dan membuat pengorbanan yang berbeda, sehingga tidak ada yang "lebih baik" daripada yang lain dalam setiap kasus.

Andrew Gorcester
sumber
4
Tidak benar bahwa PyPy tidak cocok untuk menjalankan skrip. Waktu startupnya hampir sama dengan CPython dan kecepatan interpretasinya hampir sama.
Lucian
6
Perlu dicatat bahwa PyPy sekarang hadir dengan GC tambahan, dan sebagai konsekuensinya lebih cocok untuk gim.
porgarmingduod
63

Untuk satu, itu tidak 100% kompatibel dengan Python 2.x, dan hanya memiliki dukungan awal untuk 3.x.

Ini juga bukan sesuatu yang bisa digabungkan - Implementasi Python yang disediakan oleh PyPy dihasilkan menggunakan kerangka kerja yang telah mereka buat, yang sangat keren, tetapi juga sangat berbeda dengan implementasi CPython yang ada. Itu harus menjadi pengganti yang lengkap.

Ada beberapa perbedaan yang sangat konkret antara PyPy dan CPython, yang besar adalah bagaimana modul ekstensi didukung - yang, jika Anda ingin melampaui perpustakaan standar, adalah masalah besar.

Perlu juga dicatat bahwa PyPy tidak secara universal lebih cepat.

Gareth Latty
sumber
54

Lihat video ini oleh Guido van Rossum . Dia berbicara tentang pertanyaan yang sama yang Anda tanyakan pada 12 menit 33 detik.

Highlight:

  • kurangnya kompatibilitas Python 3
  • kurangnya dukungan ekstensi
  • tidak sesuai dengan kode lem
  • kecepatan bukanlah segalanya

Bagaimanapun, dialah yang memutuskan ...

tidak ada
sumber
3
+1 untuk tautan DENGAN tautan langsung ke bagian video yang relevan! Juga memberi +1 untuk jajak pendapat resmi Guido van Rossum yang jujur ​​dan meriah, "berapa banyak orang yang menggunakan PyPy dalam produksi? ... tanpa tangan? Batuk Ya, saya kira masih ada harapan [untuk CPython]."
Trevor Boyd Smith
15

Salah satu alasannya mungkin menurut situs PyPy , saat ini hanya berjalan pada arsitektur Intel x86 32-dan 64-bit, sementara CPython juga berjalan pada platform lain. Ini mungkin karena peningkatan kecepatan platform-spesifik di PyPy. Sementara kecepatan adalah hal yang baik, orang sering ingin implementasi bahasa menjadi "platform-independen" mungkin.

Bitwise
sumber
6
Perhatikan bahwa backend ARM "hampir tiba" dan backend PowerPC adalah WIP. Juga perhatikan bahwa ini hanya merujuk pada kompiler JIT, dan porting JIT ke arsitektur baru hanya memerlukan penerapan generator kode untuk IR yang relatif sederhana dan tingkat rendah, tidak lebih.
1
Pada 2018, PyPy sekarang berjalan pada lebih banyak arsitektur x86 (32/64 bit pada Linunx, Windows, MacOS dan BSDs), tetapi juga, di Linux, perangkat keras ARM yang lebih baru (ARMv6 atau ARMv7, dengan VFPv3), besar dan kecil-endian varian PPC64, dan s390x.
Frédéric Grosshans
7

Saya sarankan menonton keynote ini oleh David Beazley untuk wawasan lebih lanjut. Ini menjawab pertanyaan Anda dengan memberikan kejelasan tentang sifat & seluk beluk PyPy.

Abhishek Mishra
sumber
6

Selain semua yang telah dikatakan di sini, PyPy tidak sekuat CPython dalam hal bug. Dengan SymPy, kami telah menemukan sekitar selusin bug di PyPy selama beberapa tahun terakhir, baik dalam versi yang dirilis maupun di nightlies.

Di sisi lain, kami hanya pernah menemukan satu bug di CPython, dan itu adalah prerelease.

Plus, jangan diskon kurangnya dukungan Python 3. Tidak ada seorang pun di komunitas inti Python yang peduli tentang Python 2 lagi. Mereka sedang mengerjakan hal-hal besar berikutnya di Python 3.4, yang akan menjadi rilis utama kelima Python 3. Orang-orang PyPy masih belum mendapatkan salah satu dari mereka. Jadi mereka harus mengejar ketinggalan sebelum mereka bisa mulai menjadi pesaing.

Jangan salah sangka. PyPy luar biasa. Tetapi masih jauh dari lebih baik daripada CPython dalam banyak hal yang sangat penting.

Dan omong-omong, jika Anda menggunakan SymPy di ​​PyPy, Anda tidak akan melihat jejak memori yang lebih kecil (atau speedup juga). Lihat https://bitbucket.org/pypy/pypy/issues/1447/ .

penilai
sumber
2
Pada 2018, saya dapat mengonfirmasi bahwa saya telah melihat speedup sekitar urutan besarnya dalam penggunaan sympy yang berbeda
Frédéric Grosshans
1
@ FrédéricGrosshans menarik. Saya harus mencoba membandingkannya lagi.
penanggung jawab