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?
Jawaban:
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:
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.
sumber
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.
sumber
Lihat video ini oleh Guido van Rossum . Dia berbicara tentang pertanyaan yang sama yang Anda tanyakan pada 12 menit 33 detik.
Highlight:
Bagaimanapun, dialah yang memutuskan ...
sumber
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.
sumber
Saya sarankan menonton keynote ini oleh David Beazley untuk wawasan lebih lanjut. Ini menjawab pertanyaan Anda dengan memberikan kejelasan tentang sifat & seluk beluk PyPy.
sumber
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/ .
sumber