Dalam tutorial Python kita dapat membaca bahwa implementasi asli Python adalah dalam C;
Di sisi lain, implementasi Python, ditulis dalam C, (...)
Saya sangat ingin tahu mengapa Python ditulis dalam C dan bukan C ++?
Saya ingin tahu alasan di balik keputusan ini dan jawabannya harus didukung oleh referensi sejarah (dan bukan berdasarkan pendapat).
python
c++
history
implementations
Piotr Dobrogost
sumber
sumber
Jawaban:
Dari semua yang saya lihat, ini adalah kombinasi dari alasan praktis dan historis. Alasan (sebagian besar) historis adalah bahwa CPython 1.0 dirilis pada tahun 1989. Pada saat itu, C baru-baru ini distandarisasi. C ++ hampir tidak dikenal dan jelas non-portable, karena hampir tidak ada yang memiliki kompiler C ++.
Meskipun C ++ jauh lebih luas dan mudah tersedia saat ini, masih diperlukan banyak pekerjaan untuk menulis ulang CPython ke dalam subset C yang kompatibel dengan C ++. Dengan sendirinya, pekerjaan itu akan memberikan sedikit atau tidak ada manfaat nyata.
Agak mirip dengan posting blog Joel tentang memulai kembali dan melakukan penulisan ulang lengkap sebagai kesalahan terburuk yang bisa dilakukan oleh perusahaan perangkat lunak. Saya akan mengatasinya dengan menunjuk konversi Microsoft dari inti Windows 3.0 ke inti Windows NT, dan konversi Apple dari MacOS 9 ke Mac OS / X. Tidak ada yang membunuh perusahaan - tetapi keduanya pasti proyek besar, mahal, jangka panjang. Keduanya juga menunjuk pada sesuatu yang penting untuk kesuksesan: mempertahankan kedua basis kode cukup lama sehingga (sebagian besar) pengguna dapat beralih ke basis kode baru di waktu luang mereka, berdasarkan pada manfaat (setidaknya dirasakan).
Namun, untuk tim pengembangan sebesar Python, perubahan semacam itu jauh lebih sulit. Bahkan perubahan dari Python 2 ke 3 telah mengambil cukup banyak pekerjaan, dan membutuhkan tumpang tindih yang serupa. Setidaknya dalam kasus itu, bagaimanapun, ada manfaat langsung untuk perubahan, yang menulis ulang ke dalam C ++ (dengan sendirinya) tidak akan (setidaknya segera) menyediakan.
Kata-kata kasar Linus Torvalds terhadap C ++ diangkat, jadi saya akan menyebutkan itu juga. Tidak ada yang saya lihat dari Guido yang menunjukkan bahwa ia memiliki perasaan negatif dan kuat terhadap C ++. Tentang yang terburuk yang pernah saya lihat dia katakan adalah bahwa mengajar C ++ sering merupakan bencana - tetapi dia langsung mengatakan bahwa ini sebagian besar karena para guru tidak / tidak tahu C ++.
Saya juga berpikir bahwa walaupun mungkin untuk mengubah banyak kode C ke C ++ dengan relatif mudah, bahwa mendapatkan banyak keuntungan nyata dari C ++ tidak hanya membutuhkan penulisan ulang yang lebih dari itu, tetapi juga membutuhkan pendidikan ulang yang substansial dari sebagian besar pengembang yang terlibat. Kebanyakan C ++ yang ditulis dengan baik sangat berbeda dari C yang ditulis dengan baik untuk melakukan hal yang sama. Ini bukan hanya masalah perubahan
malloc
kenew
danprintf
kecout
, oleh imajinasi.sumber
Saya pikir alasan mengapa ini awalnya ditulis dalam ANSI C89 cukup sederhana karena saat itu, C + + hanya bukan pilihan yang bisa diterapkan apa dengan ketidakcocokan antara kompiler yang berbeda dan semacamnya. Maksud saya, butuh sampai, apa itu, 2005, untuk datang dengan spesifikasi ABI yang akan memungkinkan kode dikompilasi dengan satu kompiler untuk memanggil kode dikompilasi dengan kompiler yang berbeda?
Pertanyaan yang lebih menarik adalah mengapa masih ditulis dalam C89.
Dan ada jawaban yang mengejutkan: karena orang benar-benar menggunakan Python pada platform yang tidak ada C ++ dan tidak ada kompiler C99! Ketika optimasi interpreter threaded-code yang diinspirasi digabungkan, ada diskusi besar tentang hal itu, karena kode (tentu saja) yang digunakan dihitung
goto
yang bukan merupakan bagian dari C89. Tampaknya ada ketakutan nyata bahwa fitur ini mungkin tidak tersedia di beberapa platform yang saat ini digunakan Python.Hal yang sama terjadi dengan Unladen Swallow, yang menggunakan LLVM, yang ditulis dalam C ++. Itu dibuat sangat jelas bahwa persyaratan untuk menggabungkan Unladen Swallow ke CPython adalah bahwa Anda dapat mengkompilasinya tanpa kompiler JIT, karena ada platform tempat orang menjalankan Python, yang tidak ada kompiler C ++.
Tentu saja, saat ini, CPython tidak lagi menjadi satu-satunya implementasi Python. Ada PyPy, yang ditulis dalam RPython (subset yang diketik secara statis dari Python), Jython di Jawa, IronPython di C #, Pynie di NQP dan PIR dan seterusnya.
sumber
Pertanyaan yang lebih baik mungkin: "Mengapa Python tidak ditulis dengan Python?"
Lebih penting lagi, sekali cukup primitif untuk kelas dan objek Python ditulis dalam C, mereka dapat digunakan untuk menulis sisa juru bahasa, sehingga Anda tidak akan mendapatkan apa pun dengan menggunakan C ++ sebagai gantinya.
sumber