Di Jawa, ada beberapa bahasa yang dikompilasi ke bytecode Java dan dapat berjalan di JVM - Clojure, Groovy, dan Scala menjadi bahasa utama yang dapat saya ingat dari atas kepala saya.
Namun, Python juga berubah menjadi bytecode (file .pyc) sebelum dijalankan oleh penerjemah Python. Saya mungkin hanya bodoh, tetapi mengapa tidak ada bahasa pemrograman lain yang mengkompilasi bytecode python?
Apakah hanya karena tidak ada yang peduli, atau ada semacam pembatasan atau penghalang yang melekat yang membuat hal itu sulit dilakukan?
python
virtual-machine
virtual-machine-languages
Michael0x2a
sumber
sumber
Jawaban:
Sederhana - terakhir kali saya memeriksa, Python tidak memiliki spesifikasi formal, termasuk bytecode-nya. CPython adalah spec, dan portabilitas bytecode adalah IIRC tidak diperlukan. Dengan demikian, ini adalah target bergerak, tidak berdokumen yang dirancang untuk bahasa tertentu.
sumber
Ada beberapa bahasa JVM karena ada orang-orang berbakat yang ingin menulis kode yang akan bekerja dengan kode Java yang ada, tetapi mereka tidak ingin menulis Jawa .
Rupanya tidak ada programmer yang ingin bekerja dengan kode Python yang ada, tetapi membenci Python cukup untuk port bahasa lain ke interteter bytecode Python.
Anda dapat melihat ini dalam dua cara: ada bahasa alternatif untuk JVM karena Java sangat luas, atau tidak ada bahasa alternatif untuk penerjemah bytecode Python karena Python tidak payah.
sumber
this
paradigma.Ada kekurangan teknis seperti GIL di CPython, tetapi sedikit kekurangan bahasa yang dirasakan , sehingga runtime bukan titik penjualan komunitas Python. Justru sebaliknya, ada lebih banyak opsi runtime backend karena ketidakpuasan dengan implementasi GIL / CPython.
Bahasa Jawa jauh lebih difitnah daripada JVM (bahkan di komunitas Jawa).
JVM cukup dihormati di sebagian besar lingkaran; dengan demikian keinginan untuk front bahasa yang berbeda / lebih baik berakhir dengan manfaat dari JVM back end yang sangat dioptimalkan.
sumber
Saya mengatakan bahwa Mason Wheeler benar. Ini sebagian besar masalah dengan Global Interpreter Lock yang membuat concurrency menjadi masalah yang sangat sulit. Karena ada beberapa VM lain yang melakukan konkurensi dengan sangat baik, masuk akal untuk mengembangkan bahasa untuk itu. Python juga telah mengalami pergeseran bahasa baru-baru ini dan banyak perpustakaan belum berhasil menjadikan kompatibilitas sebagai mimpi buruk yang ringan. Misalnya karena saya menggunakan PIL untuk pekerjaan penglihatan, saya harus kode dalam Python 2.7 atau lebih rendah. Ini bukan kasus dengan pengaturan JVM atau CLI yang khususnya dalam kasus yang terakhir dirancang dengan bahasa interop dalam pikiran.
Melakukan penelitian lebih lanjut dan ternyata sebenarnya ada dua GIL bukan hanya satu. Yang lain mengontrol Impor .
sumber
Jawaban lain sangat masuk akal, tetapi sebenarnya ada bahasa sekarang yang dikompilasi ke Python. Di mana ada kemauan ...
Saya tidak tahu apa-apa tentang bahasa-bahasa ini, tetapi mereka tampaknya bekerja dengan mengubah kode sumber mereka ke Python ASTs dan membiarkan Python mengkompilasi pohon-pohon untuk bytecode, menghindari masalah yang disebutkan dalam jawaban lain.
Berdasarkan komentar, saat ini kami tahu tiga bahasa alternatif yang menggunakan Python VM (jangan ragu menambahkan yang lain di sini):
sumber
Alasan lain adalah bahwa JVM adalah ekosistem yang sangat optimal, berkembang dengan baik, dan sangat lengkap. Sendiri, itu bersaing sangat baik dengan bahasa yang dikompilasi lainnya. (Saya tidak akan mengatakan bahwa itu adalah VM tujuan umum terbaik di luar sana, tetapi saya tentu saja telah membelokkan karier saya untuk hal itu.) Jadi mendapatkan akses ke JVM, singkat dengan menulis bytecode, sangat diinginkan.
Namun, Python VM itu baik, tetapi (tidak ada yang menentang Python) memiliki beberapa kekurangan yang serius. Lingkungan runtime Python sesuai dengan sifat dinamis bahasa dengan baik, tetapi benar-benar dapat mengejutkan Anda ketika Anda terbiasa dengan penggunaan memorinya, penguncian global, atau model threading.
Dalam perbandingan head-to-head, JVM biasanya dua kali lebih cepat dari VM Python. JVM (surprizingly) bahkan bersaing dengan baik dengan kode kompilasi asli, berdasarkan pada optimasi "panas" yang dilakukannya. Dan itu bahkan belum termasuk penanganan benang yang lebih canggih, dll.
Saya suka Python, saya benar-benar melakukannya, dan benci mengatakannya, tetapi kadang-kadang kinerjanya hanya menendang gigi saya - jika tidak, mengapa perpustakaan Python kritis seperti numpy atau scipy harus kembali ke kode C?
Dengan kata lain, orang yang tertarik pada Python melakukannya karena mereka menyukai bahasa tersebut . Tetapi jika Anda ingin menulis bahasa baru yang sesuai dengan preferensi Anda, jauh lebih baik Anda mengkompilasi ke JVM, karena bahasa istimewa baru Anda akan dimulai di salah satu lingkungan operasi terbaik (secara subjektif, mungkin yang terbaik) yang tersedia.
sumber