Ich habe verstanden, dass Python eine interpretierte Sprache ist ...
Dieses beliebte Mem ist falsch oder vielmehr auf einem Missverständnis der (natürlichen) Sprachniveaus aufgebaut: Ein ähnlicher Fehler wäre zu sagen: "Die Bibel ist ein gebundenes Buch". Lassen Sie mich dieses Gleichnis erklären ...
"Die Bibel" ist "ein Buch" im Sinne einer Klasse von (tatsächlichen, physischen Objekten, die als) Bücher identifiziert werden; Die Bücher, die als "Kopien der Bibel" bezeichnet werden, sollen etwas Grundlegendes gemeinsam haben (der Inhalt, obwohl auch diese in verschiedenen Sprachen mit unterschiedlichen akzeptablen Übersetzungen, Fußnotenebenen und anderen Anmerkungen vorliegen können) - diese Bücher sind es jedoch Es ist durchaus zulässig, sich in einer Vielzahl von Aspekten zu unterscheiden, die nicht als grundlegend angesehen werden - Art der Bindung, Farbe der Bindung, Schriftart (en), die beim Drucken verwendet werden, Abbildungen, breite Beschreibungsränder oder nicht, Anzahl und Art der eingebauten Lesezeichen , und so weiter und so fort.
Es ist durchaus möglich, dass ein typischer Druck der Bibel tatsächlich in gebundener Form vorliegt - schließlich handelt es sich um ein Buch, das normalerweise immer wieder gelesen, an mehreren Stellen mit Lesezeichen versehen und nach bestimmten Kapiteln und Versen gesucht werden soll usw. usw. und eine gute Hardcover-Bindung können dazu führen, dass eine bestimmte Kopie bei einer solchen Verwendung länger hält. Dies sind jedoch alltägliche (praktische) Probleme, anhand derer nicht festgestellt werden kann, ob ein bestimmtes tatsächliches Buchobjekt eine Kopie der Bibel ist oder nicht: Taschenbuchdrucke sind durchaus möglich!
In ähnlicher Weise ist Python "eine Sprache" im Sinne der Definition einer Klasse von Sprachimplementierungen , die alle in einigen grundlegenden Aspekten ähnlich sein müssen (Syntax, die meisten Semantiken mit Ausnahme der Teile derjenigen, in denen sie sich ausdrücklich unterscheiden dürfen), aber vollständig zulässig sind Sie unterscheiden sich in nahezu jedem "Implementierungs" -Detail - einschließlich des Umgangs mit den angegebenen Quelldateien, der Kompilierung der Quellen in Formulare niedrigerer Ebene (und, falls ja, des Formulars) und der Speicherung solcher Formulare kompilierte Formulare (auf Festplatte oder anderswo), wie sie diese Formulare ausführen, und so weiter.
Die klassische Implementierung, CPython, wird oft nur kurz "Python" genannt - aber es ist nur eine von mehreren Implementierungen in Produktionsqualität, neben Microsoft IronPython (das zu CLR-Codes kompiliert wird, dh ".NET"), Jython (das zu JVM-Codes kompiliert wird), PyPy (das in Python selbst geschrieben ist und zu einer Vielzahl von "Back-End" -Formen kompiliert werden kann, einschließlich "Just-in-Time" -generierter Maschinensprache). Sie sind alle Python (== "Implementierungen der Python-Sprache"), genau wie viele oberflächlich unterschiedliche Buchobjekte Bibeln sein können (== "Kopien der Bibel").
Wenn Sie sich speziell für CPython interessieren: Es kompiliert die Quelldateien in eine Python-spezifische Form auf niedrigerer Ebene (bekannt als "Bytecode"), und zwar automatisch bei Bedarf (wenn keine Bytecodedatei vorhanden ist, die einer Quelldatei entspricht, oder Die Bytecode-Datei ist älter als die Quelle oder von einer anderen Python-Version kompiliert. Normalerweise werden die Bytecode-Dateien auf der Festplatte gespeichert (um ein erneutes Kompilieren in Zukunft zu vermeiden). OTOH IronPython kompiliert normalerweise zu CLR-Codes (sie werden auf der Festplatte gespeichert oder nicht) und Jython zu JVM-Codes (sie werden auf der Festplatte gespeichert oder nicht - es wird die .class
Erweiterung verwendet, wenn sie gespeichert werden ).
Diese Formulare auf niedrigerer Ebene werden dann von geeigneten "virtuellen Maschinen" ausgeführt, die auch als "Interpreter" bezeichnet werden - der CPython-VM, der .NET-Laufzeit, der Java-VM (auch bekannt als JVM).
In diesem Sinne (was machen typische Implementierungen) ist Python genau dann eine "interpretierte Sprache", wenn C # und Java es sind: Alle haben eine typische Implementierungsstrategie, zuerst Bytecode zu erzeugen und ihn dann über eine VM / einen Interpreter auszuführen .
Wahrscheinlicher ist der Fokus darauf, wie "schwer", langsam und hochzerreißend der Kompilierungsprozess ist. CPython ist so konzipiert, dass es so schnell wie möglich, so leicht wie möglich und mit so wenig Zeremonie wie möglich kompiliert wird. Der Compiler führt nur sehr wenige Fehlerprüfungen und -optimierungen durch, sodass er schnell und in geringem Speicher ausgeführt werden kann, was es wiederum ermöglicht Sie können bei Bedarf automatisch und transparent ausgeführt werden, ohne dass der Benutzer sich darüber im Klaren sein muss, dass die meiste Zeit eine Kompilierung stattfindet. Java und C # akzeptieren normalerweise mehr Arbeit während der Kompilierung (und führen daher keine automatische Kompilierung durch), um Fehler gründlicher zu überprüfen und mehr Optimierungen durchzuführen. Es ist ein Kontinuum von Graustufen, keine schwarze oder weiße Situation,