it-swarm-id.com

Mengapa Python ditulis dalam C dan bukan dalam C ++?

Dalam tutorial Python orang 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).

79
Piotr Dobrogost

Dari semua yang saya lihat, ini adalah kombinasi dari alasan praktis dan historis. Alasan (kebanyakan) 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 himpunan bagian C yang kompatibel dengan C++. Dengan sendirinya, pekerjaan itu akan memberikan sedikit atau tidak ada manfaat nyata.

Ini sedikit seperti posting blog Joel tentang memulai kembali dan melakukan penulisan ulang lengkap menjadi kesalahan terburuk yang dapat 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 menunjukkan sesuatu yang penting untuk kesuksesan: mempertahankan keduanya basis kode cukup lama sehingga (sebagian besar) pengguna dapat beralih ke basis kode baru di waktu luang , berdasarkan pada (setidaknya dirasakan) manfaat.

Namun, untuk tim pengembang 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. Namun setidaknya dalam kasus itu, ada manfaat langsung untuk perubahan, yang menulis ulang menjadi 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 mengajar C++ sering merupakan bencana - tetapi dia langsung mengatakan bahwa ini sebagian besar karena para guru tidak/tidak tahu C++.

Saya juga berpikir bahwa sementara itu mungkin untuk mengubah banyak kode C ke C++ dengan relatif mudah, bahwa mendapatkan banyak keuntungan nyata dari C++ tidak hanya membutuhkan cukup banyak sedikit lebih banyak menulis ulang dari itu, tetapi juga membutuhkan pendidikan ulang 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 mengubah malloc menjadi new dan printf ke cout, dengan imajinasi apa pun.

122
Jerry Coffin

Saya pikir alasan mengapa itu 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 waktu 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 diilhami digabungkan digabung, ada - besar diskusi tentang itu, karena kode (tentu saja) yang digunakan dihitung goto yang bukan merupakan bagian dari C89.Tampak jelas ada ketakutan nyata bahwa fitur ini mungkin tidak tersedia pada beberapa platform yang Python saat ini digunakan pada.

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 yang dijalankan orang Python aktif, yang mana tidak ada kompiler C++ ada .

Tentu saja, saat ini, CPython tidak lagi menjadi satu-satunya Python implementasi. 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 sebagainya.

30
Jörg W Mittag

Pertanyaan yang lebih baik mungkin: "Mengapa tidak Python ditulis dengan Python?"

Lebih penting lagi, cukup sekali primitif untuk Python kelas dan objek ditulis dalam C, itu dapat digunakan untuk menulis sisa penerjemah, sehingga Anda tidak akan mendapatkan apa pun dengan menggunakan C++ sebagai gantinya .

10
Larry Coleman