Ze wszystkiego, co widziałem, jest to połączenie praktycznych i historycznych powodów. (Głównie) historycznym powodem jest to, że CPython 1.0 został wydany w 1989 roku. W tym czasie C został niedawno ustandaryzowany. C ++ był prawie nieznany i zdecydowanie nieprzenośny, ponieważ prawie nikt nie miał kompilatora C ++.
Chociaż C ++ jest dziś znacznie bardziej rozpowszechniony i łatwo dostępny, nadal trzeba by dużo pracy, aby przepisać CPython do podzbioru C, który jest kompatybilny z C ++. Praca sama w sobie przyniosłaby niewielką lub żadną rzeczywistą korzyść.
To trochę tak, jak na blogu Joela o rozpoczęciu od nowa i całkowitym przepisaniu, co jest najgorszym błędem, jaki może popełnić firma programistyczna. Odrzuciłbym to, wskazując na konwersję Microsoftu z rdzenia Windows 3.0 na rdzeń Windows NT oraz konwersję Apple z MacOS 9 na Mac OS / X. Żaden z nich nie zabił firmy - ale oba były zdecydowanie dużymi, drogimi, długoterminowymi projektami. Oba wskazują również na coś, co ma kluczowe znaczenie dla sukcesu: utrzymanie obu baz kodu wystarczająco długo, aby (większość) użytkownicy mogli swobodnie przełączać się na nową bazę kodu w oparciu o (przynajmniej dostrzegane) korzyści.
Jednak dla zespołu programistów wielkości Pythona taka zmiana jest znacznie trudniejsza. Nawet zmiana z Pythona 2 na 3 zajęła sporo pracy i wymagała podobnego nakładania się. Przynajmniej w takim przypadku zmiany mają jednak bezpośrednie zalety, których przepisanie do C ++ (samo w sobie) nie zapewniłoby (przynajmniej natychmiast).
Poruszenie Linusa Torvaldsa przeciwko C ++ zostało podniesione, więc też o tym wspomnę. Nic, co widziałem od Guido, nie wskazuje na to, że ma on takie silne, negatywne uczucia wobec C ++. Najgorsze, jak go widziałem, to to, że nauczanie C ++ jest często katastrofą - ale od razu powiedział, że dzieje się tak głównie dlatego, że nauczyciele nie znają / nie znają C ++.
Myślę również, że chociaż można stosunkowo łatwo przekonwertować wiele kodu C na C ++ , uzyskanie realnej przewagi z C ++ wymaga nie tylko nieco więcej przepisywania niż to, ale także wymaga znacznej reedukacji większości zaangażowanych programistów. Większość dobrze napisanego C ++ zasadniczo różni się od dobrze napisanego C, aby robić te same rzeczy. To nie tylko kwestia zmieniających malloc
się new
i printf
do cout
, przez odcinku wyobraźni.