Saya telah diberikan untuk memahami bahwa Python adalah bahasa yang ditafsirkan ...
Meme populer ini tidak benar, atau, lebih tepatnya, dibangun di atas kesalahpahaman tingkat bahasa (alami): kesalahan yang sama akan mengatakan "Alkitab adalah buku hardcover". Biarkan saya jelaskan perumpamaan itu ...
"Alkitab" adalah "sebuah buku" dalam arti menjadi kelas dari (sebenarnya, objek fisik yang diidentifikasi sebagai) buku; buku-buku yang diidentifikasi sebagai "salinan Alkitab" seharusnya memiliki kesamaan yang mendasar (isinya, meskipun bahkan bisa dalam bahasa yang berbeda, dengan terjemahan yang dapat diterima berbeda, tingkat catatan kaki dan anotasi lainnya) - namun, buku-buku itu adalah sangat diizinkan untuk berbeda dalam banyak aspek yang tidak dianggap mendasar - jenis penjilidan, warna penjilidan, font yang digunakan dalam pencetakan, ilustrasi jika ada, margin yang dapat ditulis atau tidak, jumlah dan jenis penanda bawaan , dan sebagainya, dan sebagainya.
Sangat mungkin bahwa pencetakan Alkitab yang khas tentu saja akan mengikat hardcover - setelah semua, itu adalah buku yang biasanya dimaksudkan untuk dibaca berulang-ulang, di-bookmark di beberapa tempat, dibolak-balik mencari petunjuk bab dan ayat yang diberikan , dll, dll, dan penjilidan hardcover yang baik dapat membuat salinan yang diberikan bertahan lebih lama saat digunakan. Namun, ini adalah masalah duniawi (praktis) yang tidak dapat digunakan untuk menentukan apakah objek buku yang sebenarnya adalah salinan Alkitab atau tidak: cetakan paperback sangat mungkin!
Demikian pula, Python adalah "bahasa" dalam arti mendefinisikan kelas implementasi bahasa yang semuanya harus serupa dalam beberapa hal mendasar (sintaksis, sebagian besar semantik kecuali bagian-bagian yang secara eksplisit diizinkan berbeda) tetapi diizinkan sepenuhnya berbeda dalam setiap detail "implementasi" - termasuk bagaimana mereka berurusan dengan file sumber yang diberikan, apakah mereka mengkompilasi sumber ke beberapa formulir tingkat yang lebih rendah (dan, jika demikian, bentuk mana - dan apakah mereka menyimpannya formulir yang dikompilasi, ke disk atau tempat lain), bagaimana mereka mengeksekusi formulir tersebut, dan sebagainya.
Implementasi klasik, CPython, sering disebut hanya "Python" singkatnya - tetapi itu hanya salah satu dari beberapa implementasi kualitas produksi, berdampingan dengan IronPython Microsoft (yang mengkompilasi ke kode CLR, yaitu, ".NET"), Jython (yang mengkompilasi kode JVM), PyPy (yang ditulis dengan Python sendiri dan dapat dikompilasi ke berbagai macam bentuk "back-end" termasuk "just-in-time" bahasa mesin yang dihasilkan). Mereka semua adalah Python (== "implementasi bahasa Python") sama seperti banyak objek buku yang berbeda-beda semua bisa menjadi Alkitab (== "salinan Alkitab").
Jika Anda tertarik pada CPython secara spesifik: ia mengkompilasi file sumber ke dalam bentuk tingkat rendah spesifik-Python (dikenal sebagai "bytecode"), melakukannya secara otomatis ketika diperlukan (ketika tidak ada file bytecode yang sesuai dengan file sumber, atau file bytecode lebih tua dari sumber atau dikompilasi oleh versi Python yang berbeda), biasanya menyimpan file bytecode ke disk (untuk menghindari kompilasi ulang mereka di masa depan). OTOH IronPython biasanya akan dikompilasi ke kode CLR (menyimpannya ke disk atau tidak, tergantung) dan Jython ke kode JVM (menyimpannya ke disk atau tidak - itu akan menggunakan .class
ekstensi jika itu menyimpannya).
Bentuk-bentuk tingkat yang lebih rendah ini kemudian dijalankan oleh "mesin virtual" yang sesuai juga dikenal sebagai "juru bahasa" - VM CPython, runtime .Net, Java VM (alias JVM), yang sesuai.
Jadi, dalam pengertian ini (apa yang dilakukan implementasi tipikal), Python adalah "bahasa yang diartikan" jika dan hanya jika C # dan Java adalah: semuanya memiliki strategi implementasi yang khas untuk menghasilkan bytecode terlebih dahulu, kemudian menjalankannya melalui VM / interpreter .
Lebih mungkin fokusnya adalah pada seberapa "berat", lambat, dan tinggi upacara proses kompilasi. CPython dirancang untuk mengkompilasi secepat mungkin, seringan mungkin, dengan upacara sesedikit mungkin - kompiler melakukan pengecekan dan optimasi kesalahan yang sangat sedikit, sehingga dapat berjalan cepat dan dalam jumlah kecil memori, yang pada gilirannya memungkinkannya dijalankan secara otomatis dan transparan kapan pun diperlukan, tanpa pengguna bahkan perlu menyadari bahwa ada kompilasi yang terjadi, sebagian besar waktu. Java dan C # biasanya menerima lebih banyak pekerjaan selama kompilasi (dan karenanya tidak melakukan kompilasi otomatis) untuk memeriksa kesalahan lebih menyeluruh dan melakukan lebih banyak optimasi. Ini adalah rangkaian skala abu-abu, bukan situasi hitam atau putih,