it-swarm-eu.dev

Warum ist Python in C und nicht in C ++ geschrieben?

In Pythons Tutorial kann man lesen, dass Pythons ursprüngliche Implementierung in C ist;

Andererseits ist die Python Implementierung, geschrieben in C, (...)

Ich bin sehr gespannt, warum Python in C und nicht in C++ geschrieben wurde?

Ich würde gerne die Gründe für diese Entscheidung kennen und die Antwort sollte durch historische Referenzen gestützt werden (und nicht auf Meinungen basieren).

79
Piotr Dobrogost

Nach allem, was ich gesehen habe, ist es eine Kombination aus praktischen und historischen Gründen. Der (meistens) historische Grund ist, dass CPython 1.0 1989 veröffentlicht wurde. Zu diesem Zeitpunkt wurde C erst kürzlich standardisiert. C++ war fast unbekannt und entschieden nicht portierbar, da fast niemand einen C++ - Compiler hatte.

Obwohl C++ heutzutage viel weiter verbreitet und leicht verfügbar ist, würde es immer noch eine Menge Arbeit erfordern, CPython in die Teilmenge von C umzuschreiben, die mit C++ kompatibel ist. Diese Arbeit allein würde wenig oder gar keinen wirklichen Nutzen bringen.

Es ist ein bisschen wie Joels Blog-Beitrag darüber, von vorne zu beginnen und eine vollständige Neufassung durchzuführen, was der schlimmste Fehler ist, den ein Softwareunternehmen machen kann. Ich würde dem entgegenwirken, indem ich auf die Konvertierung von Microsoft vom Windows 3.0-Kern zum Windows NT-Kern und die Konvertierung von Apple von MacOS 9 auf Mac OS/X verweise. Keiner von beiden hat das Unternehmen getötet - aber beide waren definitiv große, teure und langfristige Projekte. Beide weisen auch auf etwas hin, das für den Erfolg entscheidend ist: Beibehalten beider Codebasen so lange, dass (die meisten) Benutzer nach Belieben zur neuen Codebasis wechseln können , basierend auf (zumindest wahrgenommenen) Vorteilen.

Für ein Entwicklungsteam von der Größe von Pythons ist diese Art der Änderung jedoch viel schwieriger. Sogar die Änderung von Python 2 auf 3 hat viel Arbeit gekostet und eine ähnliche Überlappung erforderlich gemacht. Zumindest in diesem Fall gibt es jedoch direkte Vorteile für die Änderungen, in die neu geschrieben wird C++ (für sich) würde nicht (zumindest sofort) bereitstellen.

Linus Torvalds 'Schimpfen gegen C++ wurde zur Sprache gebracht, also werde ich das auch erwähnen. Nichts, was ich von Guido gesehen habe, deutet darauf hin, dass er solche starken, negativen Gefühle gegenüber C++ hat. Das Schlimmste, was ich von ihm gesehen habe, ist, dass C++ zu unterrichten ist oft eine Katastrophe - aber er fuhr sofort fort, dass dies hauptsächlich darauf zurückzuführen ist, dass die Lehrer C++ nicht kannten/nicht kannten.

Ich denke auch, dass es zwar möglich ist, viel C-Code mit relativer Leichtigkeit in C++ zu konvertieren, aber um einen echten Vorteil von C++ zu erzielen, ist nicht nur ein ziemlicher Aufwand erforderlich etwas mehr Umschreiben als das, erfordert aber auch eine umfassende Umschulung der meisten beteiligten Entwickler. Das meiste gut geschriebene C++ unterscheidet sich wesentlich von gut geschriebenem C++, um die gleichen Dinge zu tun. Es geht nicht nur darum, malloc in new und printf in cout, nach Belieben.

122
Jerry Coffin

Ich denke, der Grund, warum es rsprünglich in ANSI C89 geschrieben wurde, ist ganz einfach, weil C++ damals einfach keine praktikable Wahl war, was mit Inkompatibilitäten zwischen verschiedenen Compilern und dergleichen zu tun hatte. Ich meine, es dauerte bis 2005, bis eine ABI-Spezifikation erstellt wurde, mit der Code, der mit einem Compiler kompiliert wurde, Code aufrufen konnte, der mit einem anderen Compiler kompiliert wurde.

Die interessantere Frage ist, warum es noch in C89 geschrieben ist.

Und es gibt eine überraschende Antwort: Weil die Leute tatsächlich Python auf Plattformen verwenden, für die es keinen C++ - und keinen C99-Compiler gibt! Als die von Forth inspirierten Optimierungen für Thread-Code-Interpreter zusammengeführt wurden, gab es ein - riesig Diskussion darüber, weil der Code (notwendigerweise) berechnetes goto verwendet, das nicht Teil von C89 ist. Es gab anscheinend echte Befürchtungen, dass diese Funktion auf einigen Plattformen nicht verfügbar sein könnte dass Python wird derzeit verwendet.

Dasselbe geschah mit Unladen Swallow, das LLVM verwendet, das in C++ geschrieben ist. Es wurde sehr deutlich gemacht, dass eine Voraussetzung für das Zusammenführen von Unladen Swallow mit CPython darin besteht, dass Sie es ohne den JIT-Compiler kompilieren können, da es Plattformen gibt, auf denen Python on) ausgeführt wird, für die kein C++ - Compiler vorhanden ist .

Natürlich ist CPython heutzutage nicht mehr die einzige Python -Implementierung. Es gibt PyPy, das in RPython (einer statisch typisierten Teilmenge von Python) geschrieben ist, Jython in Java, IronPython in C #, Pynie in NQP und PIR und so weiter.

30
Jörg W Mittag

Eine bessere Frage könnte sein: "Warum ist nicht Python in Python geschrieben?"

Genauer gesagt, sobald genügend Grundelemente für Python Klassen und Objekte in C geschrieben sind, können diese zum Schreiben des restlichen Interpreters verwendet werden, sodass Sie mit C++ nichts gewinnen würden .

10
Larry Coleman