In Pythons Tutorial kann man lesen, dass Pythons ursprüngliche Implementierung in C ist;
Auf der anderen Seite die Python-Implementierung, geschrieben in C, (...)
Ich bin sehr gespannt, warum Python in C und nicht in C ++ geschrieben wurde.
Ich möchte die Gründe für diese Entscheidung kennen und die Antwort sollte durch historische Referenzen (und nicht meinungsbasiert) gestützt werden.
python
c++
history
implementations
Piotr Dobrogost
quelle
quelle
Antworten:
Nach allem, was ich gesehen habe, ist es eine Kombination aus praktischen und historischen Gründen. Der (meist) historische Grund ist, dass CPython 1.0 1989 veröffentlicht wurde. Damals wurde C erst kürzlich standardisiert. C ++ war fast unbekannt und definitiv nicht portierbar, da fast niemand einen C ++ - Compiler hatte.
Obwohl C ++ heutzutage weit verbreiteter und leichter verfügbar ist, würde es immer noch eine Menge Arbeit erfordern, CPython in eine Teilmenge von C umzuschreiben, die mit C ++ kompatibel ist. An sich würde diese Arbeit wenig oder gar keinen wirklichen Nutzen bringen.
Es ist ein bisschen wie in Joels Blog-Post, in dem es darum geht, von vorne zu beginnen und ein komplettes Rewrite durchzuführen, was der schlimmste Fehler ist, den ein Software-Unternehmen machen kann. Ich würde dem entgegenwirken, indem ich auf Microsofts Konvertierung von Windows 3.0 auf Windows NT und auf Apples Konvertierung von MacOS 9 auf Mac OS / X verweise. Keiner von beiden tötete die Firma - aber beide waren definitiv große, teure und langfristige Projekte. Beide weisen auch auf etwas Entscheidendes für den Erfolg hin: Beide Codebasen müssen so lange erhalten bleiben, dass (die meisten) Benutzer nach Belieben auf die neue Codebasis umsteigen können, basierend auf den (zumindest wahrgenommenen) Vorteilen.
Für ein Entwicklerteam der Größe von Python ist eine solche Änderung jedoch viel schwieriger. Sogar der Wechsel von Python 2 zu 3 hat viel Arbeit gekostet und eine ähnliche Überlappung erforderlich gemacht. Zumindest in diesem Fall ergeben sich jedoch direkte Vorteile für die Änderungen, die ein (eigenständiges) Umschreiben in C ++ (zumindest sofort) nicht bieten würde.
Linus Torvalds 'Schimpfwort gegen C ++ wurde zur Sprache gebracht, deshalb erwähne ich das auch. Nichts, was ich von Guido gesehen habe, deutet darauf hin, dass er solch starke negative Gefühle gegenüber C ++ hat. Das Schlimmste, was ich von ihm gehört habe, ist, dass das Unterrichten von C ++ oft eine Katastrophe ist - aber er fuhr sofort fort, dass dies größtenteils darauf zurückzuführen ist, dass die Lehrer C ++ nicht kannten / nicht kannten.
Ich denke auch, dass es zwar relativ einfach ist, eine Menge C-Code in C ++ umzuwandeln , dass es jedoch nicht nur ein bisschen mehr Umschreiben erfordert, sondern auch eine erhebliche Umschulung der meisten beteiligten Entwickler. Die meisten gut geschriebenen C ++ unterscheiden sich wesentlich von gut geschriebenen C, um die gleichen Dinge zu tun. Es ist nicht nur eine Frage des Wechsels
malloc
zunew
undprintf
zucout
von einer Strecke der Phantasie.quelle
Ich denke, der Grund, warum es ursprü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 hat. Ich meine, es hat bis 2005 gedauert, um eine ABI-Spezifikation zu entwickeln, die es Code, der mit einem Compiler kompiliert wurde, ermöglicht, Code aufzurufen, der mit einem anderen Compiler kompiliert wurde.
Die interessantere Frage ist, warum es immer noch in C89 geschrieben ist.
Und es gibt eine überraschende Antwort: Weil die Leute Python tatsächlich auf Plattformen verwenden, für die es keinen C ++ - und keinen C99-Compiler gibt! Als die Forth-inspirierten Threaded-Code-Interpreter-Optimierungen zusammengeführt wurden, gab es eine große Diskussion darüber, da der (notwendigerweise) verwendete Code berechnet wurde,
goto
der nicht Teil von C89 ist. Es gab anscheinend echte Befürchtungen, dass diese Funktion auf einigen der Plattformen, auf denen Python derzeit verwendet wird, nicht verfügbar sein könnte.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 zu CPython darin besteht, dass Sie es ohne den JIT-Compiler kompilieren können, da es Plattformen gibt, auf denen Python ausgeführt wird und für die kein C ++ - Compiler existiert.
Natürlich ist CPython heutzutage nicht mehr die einzige Python-Implementierung. Es gibt PyPy, das in RPython (einer statisch typisierten Teilmenge von Python), Jython in Java, IronPython in C #, Pynie in NQP und PIR usw. geschrieben ist.
quelle
Eine bessere Frage könnte sein: "Warum ist Python nicht in Python geschrieben?"
Genauer gesagt, sobald in C genügend Grundelemente für Python-Klassen und -Objekte geschrieben sind, können diese zum Schreiben des restlichen Interpreters verwendet werden, sodass Sie durch die Verwendung von C ++ nichts gewinnen würden.
quelle