it-swarm.dev

Python C ++ ile değil C ile yazılmıştır?

Python's tutorial 'da Python'un orijinal uygulamasının C dilinde olduğu okunabilir;

Öte yandan, Python uygulama, (...)

Çok merak ediyorum neden Python C++ değil C ile yazılmış?

Bu kararın ardındaki mantığı bilmek istiyorum ve cevap tarihsel referanslarla desteklenmeli (görüşe dayalı değil).

79
Piotr Dobrogost

Gördüğüm her şeyden, pratik ve tarihsel nedenlerin bir kombinasyonu. (Çoğunlukla) tarihsel neden, CPython 1.0'ın 1989'da piyasaya sürülmesidir. O zaman, C yakın zamanda standardize edildi. Neredeyse hiç kimsenin C++ derleyicisi olmadığı için C++ neredeyse bilinmiyordu ve kesinlikle taşınabilir değildi.

C++ bugün çok daha yaygın ve kolay erişilebilir olsa da, CPython'u C++ ile uyumlu C'nin alt kümesine yeniden yazmak için hala oldukça fazla iş gerekir. Kendi başına, bu çalışma çok az fayda sağlayacak veya hiç fayda sağlayamayacaktır.

Bir yazılım şirketinin yapabileceği en kötü hata olan baştan başlamak ve tam bir yeniden yazma yapmak gibi Joel'in blog yazısı gibi. Microsoft'un Windows 3.0 çekirdeğinden Windows NT çekirdeğine dönüşümüne ve Apple'ın MacOS 9'dan Mac OS/X'e dönüşümüne işaret ederek bunu sayabilirim. İkisi de şirketi öldürmedi - ama ikisi de kesinlikle büyük, pahalı, uzun vadeli projelerdi. Her ikisi de başarı için çok önemli bir şeye işaret ediyor: her iki kod tabanının (çoğu) kullanıcının boş zamanlarında yeni kod tabanına geçebileceği kadar uzun süre korunması (en azından algılanan) faydalara dayanarak.

Bununla birlikte, bir geliştirme ekibi için Python'ların büyüklüğü bu tür bir değişikliği çok daha zordur. Python 2'den 3'e geçiş bile oldukça fazla iş aldı ve benzer bir çakışma gerektirdi. C++ (kendi başına) (en azından derhal) sağlamadı.

Linus Torvalds'ın C++ karşısındaki rütbesi büyüdü, bu yüzden de bundan bahsedeceğim. Guido'dan gördüğüm hiçbir şey onun C++ karşısında güçlü, olumsuz duygulara sahip olduğunu göstermiyor. Onu gördüğüm en kötü şey, C++ öğretimi genellikle bir felaket - ama hemen bunun büyük ölçüde öğretmenlerin C++ bilmediği/bilmediği için olduğunu söyledi.

Ben de göreceli kolaylığı ile C++ bir sürü C kodu dönüştürmek mümkün olsa da, C + + çok gerçek avantaj elde sadece bir biraz daha fazla yeniden yazma, ancak aynı zamanda ilgili çoğu geliştiricinin önemli ölçüde yeniden eğitimini gerektirir. En iyi yazılmış C++, aynı şeyleri yapmak için iyi yazılmış C'den oldukça farklıdır. değil sadece malloc yerine new ve printf yerine cout, hayal gücünün herhangi bir uzantısıyla.

122
Jerry Coffin

Ben ANSI C89 içinde yazılmış aslında olmasının nedeni oldukça basit çünkü o zamandan beri, C++ farklı derleyiciler ve bu tür arasındaki uyumsuzluklar ne uygulanabilir bir seçim değildi düşünüyorum. Yani, bir derleyici ile derlenen kodun farklı bir derleyici ile derlenen kodu çağırmasına izin verecek bir ABI belirtimi bulmak 2005 yılı neye kadar sürdü?

Daha ilginç olan soru, neden C89'da yazıldığı hala.

Ve şaşırtıcı bir cevap var: insanlar aslında C++ ve C99 derleyicisinin bulunmadığı platformlarda Python) kullandıklarından, Forth'tan esinlenen dişli kod yorumlayıcı optimizasyonları birleştirildiğinde - büyük bununla ilgili tartışma, çünkü kod (mutlaka) C89'un bir parçası olmayan goto hesapladı, çünkü bu özelliğin bazı platformlarda bulunmayabileceği gerçek korkular vardı şu anda Python kullanılıyor.

Aynı şey C++ ile yazılmış LLVM kullanan Unladen Swallow'da da oldu. Yüksüz Yutmayı CPython ile birleştirmek için bir gereksinimin, JIT derleyicisi olmadan derleyebilmeniz olacağı çok açıktı, çünkü insanların çalıştığı platformlar var Python, üzerinde C++ derleyicisinin mevcut olmadığı .

Tabii ki, günümüzde, CPython artık sadece Python uygulama değil. RPython'da (Python'un statik olarak yazılan bir alt kümesi) yazılmış PyPy var, C # 'da IronPython, Pynie NQP ve PIR vb.

30
Jörg W Mittag

Daha iyi bir soru şu olabilir: "Neden Python Python'da yazılmıyor?"

Daha da önemlisi, Python sınıflar ve nesneler C'de yazıldığında, bunlar yorumlayıcının geri kalanını yazmak için kullanılabilir, bu nedenle bunun yerine C++ kullanarak hiçbir şey kazanmazsınız. .

10
Larry Coleman