Mengapa Python tidak memilikinya?
Saya tidak yakin mengapa Anda berpikir tidak ada implementasi Python yang peduli dengan kinerja. PyPy , IronPython , dan Jython adalah implementasi Python yang siap digunakan untuk industri yang peduli terhadap kinerja. Pyston adalah implementasi dalam pengembangan yang secara khusus dibuat untuk kinerja. Unladen Swallow dan Psyco juga proyek untuk meningkatkan kinerja Python.
Namun, fakta bahwa pengguna CPython jauh melebihi jumlah total basis pengguna gabungan dari semua implementasi lainnya, bahwa Unladen Swallow ditolak oleh komunitas, bahwa sebagian besar proyek ini mati atau berjuang untuk menarik pengembang harus memberi tahu Anda sesuatu tentang bagaimana Python kinerja nilai-nilai masyarakat.
Jawaban ini adalah contoh yang baik dari mentalitas khas komunitas Python: daripada memperbaiki masalah kinerja, mereka lebih suka menulis kode mereka bukan dengan Python.
Saya telah melihat PyPy dan IronPython, yang keduanya mengklaim peningkatan kecepatan. PyPy Saya tidak mengerti bagaimana implementasi Python yang ditulis dengan Python, bahasa yang ditafsirkan, akan lebih cepat daripada implementasi referensi dalam C.
Pertama: tidak peduli bahasa compiler ditulis dalam Setelah semua, compiler hanya dijalankan. Sekali , sehingga bahkan jika itu yang lambat, itu tidak masalah: kinerja compiler tidak relevan, apa yang relevan adalah kinerja output dari kompiler.
Kedua, karena itu hanya masalah seberapa cepat output dari kompiler, dan kompiler ditulis dengan Python, yaitu bahasa yang dikompilasi, itu benar-benar dapat membuat dirinya cepat dengan mengkompilasi sendiri.
Ketiga, tidak ada yang namanya "bahasa yang ditafsirkan". Bahasa adalah seperangkat aturan dan batasan matematika. Ini adalah spesifikasi. Selembar kertas. Bahasa tidak dikompilasi atau ditafsirkan. Bahasa apa adanya . Kompilasi dan interpretasi adalah ciri-ciri implementasi bahasa , lebih tepatnya, kompiler atau juru bahasa (duh!), Bukan bahasa. Setiap bahasa dapat diimplementasikan oleh kompiler. Setiap bahasa dapat diimplementasikan oleh penerjemah. Anda dapat secara otomatis menghasilkan kompiler dari seorang juru bahasa dan seorang juru bahasa dari sebuah kompiler.
Tetapi semua ini sebenarnya tidak terlalu penting, karena PyPy sebenarnya tidak ditulis dengan Python. Itu ditulis dalam RPython . RPython terdiri dari dua bagian, bahasa pemrograman RPython dan kerangka RPython.
Bahasa pemrograman RPython bukan Python. Ini adalah bahasa pemrograman yang berbeda. RPython adalah bahasa pemrograman yang diketik secara statis, kira-kira pada tingkat yang sama pada abstraksi seperti Jawa, dengan kinerja yang kira-kira sama dengan C. RPython adalah bagian sintaksis dan semantik dari Python, yang berarti bahwa setiap program RPython adalah program Python yang valid dan dapat dijalankan oleh implementasi Python (walaupun biasanya beberapa perintah besarnya lebih lambat, tetapi ini masih berguna untuk debugging karena Anda mendapatkan akses ke semua alat Python, dan interpretasi dimulai segera, sedangkan mengkompilasi implementasi bahasa biasanya memakan waktu sekitar 5-10 menit ), tetapi kebalikannya tidak benar.
Kerangka kerja RPython adalah kerangka kerja untuk menulis implementasi bahasa dinamis kinerja tinggi dalam bahasa pemrograman RPython. Ini termasuk pengumpul sampah, ruang objek, protokol meta-objek, objek yang ditentukan sebelumnya, jenis, dan operasi, dan sebagainya. Tetapi permata mahkota adalah kemampuannya untuk secara otomatis menghasilkan kompiler JIT dari juru bahasa: jika Anda menerapkan bahasa dalam kerangka RPython, Anda hanya perlu menulis juru bahasa, kerangka kerja RPython menangani JIT.
Ada banyak implementasi bahasa pada platform RPython , bukan hanya PyPy.
IronPython, ide yang sama tapi saya tidak melihat bagaimana .NET Framework akan meningkatkan kecepatan.
Sebagian besar implementasi ISO CLI, seperti berbagai varian .NET oleh Microsoft, atau Mono, berisi pengumpul, pengoptimal, dan kompiler sampah yang canggih. Hal yang sama berlaku untuk implementasi Jython dan Java.
IronPython adalah kompiler, ia mengkompilasi kode sumber Python ke pohon DLR (DLR adalah Dynamic Language Runtime), yang kemudian dikompilasi lebih lanjut ke kode byte CIL, yang kemudian biasanya dikompilasi lebih lanjut ke kode mesin asli.