Frage

Python in einen Zwischen Bytecode kompiliert (pyc) und dann ausgeführt. So gibt es eine Zusammenstellung durch Interpretation gefolgt. Doch seit langer Zeit eines Python-Benutzer sagen, dass Python eine „späte Bindung“ Sprache ist und dass es als eine interpretierte Sprache bezeichnet wird should`nt.

  1. Wie würde Python aus einer anderen interpretierte Sprache anders sein?

  2. Könnten Sie mir sagen, was "späte Bindung" bedeutet in dem Python-Kontext?

Java ist eine andere Sprache, die zuerst in Bytecode kompiliert Quellcode hat und dann in Bytecode interpretiert.

  1. Ist Java eine interpretierte / kompilierte Sprache?

  2. Wie unterscheidet es sich von Python in Bezug auf die Kompilierung / Ausführung?

  3. Java soll nicht haben, "späte Bindung". Hat das etwas mit Java-Programmen sind slighly schneller als Python zu tun?

wäre es toll, wenn Sie auch mich an Orte verbindet geben könnte, wo die Menschen bereits darüber gesprochen haben; Ich würde gerne mehr darüber lesen. Danke.

War es hilfreich?

Lösung

Späte Bindung ist ein ganz anderes Konzept zur Interpretation.

Genau genommen ist eine interpretierte Sprache direkt von der Quelle ausgeführt. Es geht nicht durch ein Byte-Code Kompilierungsphase. Die Verwirrung entsteht, weil das Python-Programm is ein Dolmetscher, aber es interpretiert die Byte-Code, so dass es Python-Bytecode Sprache ist, dass Sie als „interpretiert“ bezeichnen würde. Die Python-Sprache selbst ist eine kompilierte Sprache.

Java-Bytecode, ist dagegen sowohl interpretiert und kompiliert, in diesen Tagen. Es wird kompiliert in nativen Code durch einen JIT-Compiler und dann direkt auf der Hardware ausgeführt werden.

Späte Bindung ist eine Eigenschaft des Typs System und ist in den meisten Sprachen bis zu einem gewissen Grad, und zwar unabhängig davon, ob sie interpretiert oder kompiliert.

Andere Tipps

Wie würde Python aus einer anderen interpretierte Sprache anders sein?

Das beinhaltet Haarspalterei. Interpretierter Sprachen und „Managed Code“ Sprachen wie C # und virtuelle Maschine Sprachen (wie Java) eine seltsame Kontinuum bilden. Es gibt Leute, die sagen, dass die alle Sprachen „interpretiert“ - auch in Maschinensprache. Denn die elektronischen Schaltungen des CPU „interpretieren“ Maschinensprache.

Das Beste, was Sie tun können, ist zu sagen, dass „interpretiert“ bedeutet, dass es eine sichtbare Schicht von Software-Anwendung Byte-Codes zu interpretieren. „Nicht interpretiert“ bedeutet, dass Ihre Software (mehr oder weniger) direkt von der zugrunde liegenden Hardware ausgeführt. „Managed Code“ Menschen sind frei, weiterhin diese Haare spalten.

Könnten Sie mir sagen, was "späte Bindung" bedeutet in dem Python-Kontext?

Die Variablen werden nicht deklariert einen Typ zu haben. Die Variable ist verpflichtet, auf eine Art so spät wie möglich -. Mit der Zuordnung eines tatsächlichen Objekts

Ist Java eine interpretierte / kompilierte Sprache?

Ja. Es ist zu Bytecode kompiliert. Der Byte-Codes interpretiert. Ich ziehe es interpretiert zu nennen.

Allerdings werden die Menschen (für wirklich unerfindlichen Gründen) nicht einverstanden sind. Die Anwesenheit von jeder Art von „Übersetzen“ Schritt - aber minimal - immer verwirrt die Leute. Die Übersetzung Bytecode hat fast keine Relevanz für das tatsächliche Verhalten des Programms zur Laufzeit. Einige Leute mögen, dass die sagen, nur Sprachen, die sind total frei von jedem Makel der Vorverarbeitung „Compilation“ interpretiert werden kann. Es gibt nicht viele Beispiele dafür mehr, da viele Sprachen von menschenfreundlichen Text-Interpreter freundlich Bytecode übersetzt werden. Auch Applesoft Basic (zurück in den 80er Jahren) hatte diese Art der Übersetzung Pass gemacht, wie Sie Code eingegeben.

Einige tun JIT JVM. Manche tun es nicht. Einige sind ein Gemisch. Zu sagen, dass die JVM funktioniert nur JIT-Byte-Code-Übersetzung falsch ist. Einige JVM tun. Manche tun es nicht.

Wie unterscheidet es sich von Python in Bezug auf die Kompilierung / Ausführung?

nicht. Der Java-VM kann Python ausführen. [Für die leicht verwechselt, kann das Wort „Python“ in diesem Zusammenhang bedeutet nicht, möglicherweise „Python source“. Es muss Python-Bytecode bedeuten.]

Java soll nicht haben, „späte Bindung“. Hat das etwas mit Java-Programmen sind slighly schneller als Python zu tun?

Vielleicht. Java-Programme sind oft wegen der JIT-Compiler schneller, die zur Laufzeit in Maschinencode Java-Bytecode übersetzen.

Static ( „early“) Bindung nicht die gleiche Art von Nutzen für Java, dass es mit einer wirklich kompilierten Sprache wie C oder C ++ hat, wo es fast keine Laufzeitprüfungen jeglicher Art. Java tut es immer noch Dinge wie Längenprüfung, die C auslässt im Interesse der Rohgeschwindigkeit.

Es gibt eigentlich wenig Strafe für „spät“ Bindung. Python-Attribute und Methoden werden mit einfachen Wörterbuch-Lookups aufgelöst. Das Wörterbuch ist ein Hash; Leistung ist sehr gut. Die Hash-Werte für Namen können in eine „interniert“ Stringliteral Pool gesetzt werden amortizing die Kosten der Hash berechnet wird.

Für echten Spaß, schaut PyPy und RPython. Dies ist ein Python-Interpreter, der JIT-Kompilierung tun. Sie winden mit einem 2-Tier-Interpreter auf. Der Code wird durch PyPy interpretiert. PyPy wird durch RPython interpretiert. http://alexgaynor.net/2010/may/15/pypy-future -python /

Es gibt eine Verbindung zwischen dem, was wir nennen das Bindungszeit und das Konzept der Interpretation / Kompilation .

Die Bindungszeit ist die Zeit, wenn ein symbolischer Ausdruck seines konkreten Wert gebunden ist. Das ist mehr im Zusammenhang mit der Definition der Programmiersprache, zum Beispiel Dynamische oder statische Scoping von Variablen. Oder statische Methode vs. virtuelle Methoden oder dynamische Typisierung gegen statische Typisierung.

Dann kommt die Umsetzung der Sprache. Je mehr Informationen sind statisch bekannt im Voraus, desto leichter ist es einen Compiler zu schreiben. desto spät umgekehrt, wird die gebundene Sprache ist, desto schwieriger ist es. Daraus ergibt sich die Notwendigkeit, manchmal auf Interpretationstechniken angewiesen.

Der Unterschied zwischen den beiden ist jedoch nicht streng. Nicht nur können wir davon ausgehen, dass alles, was letztlich interpretiert wird (siehe S. Lott Antwort), aber ein Teil des Codes kann kompiliert werden, dekompilieren oder recompile dynamisch (zum Beispiel JIT) macht die Unterscheidung sehr unscharf.

Zum Beispiel dynamische Laden von Klassen in Java geht in der Kategorie „späte Bindung“: die Menge der Klasse wird ein für alle Mal nicht festgelegt, und Klassen dynamisch geladen werden. Einige Optimierungen kann getan werden, wenn wir den Satz von Klassen kennen, sondern müssen für ungültig erklärt werden, sobald eine neue Klasse geladen wird. Das gleiche geschieht mit der Fähigkeit, eine Methode mit der Debug-Infrastruktur zu aktualisieren. Die JVM werden alle Aufrufstellen müssen de-optimize wurden die Verfahren inlined worden waren

Ich weiß nicht viel über Python, aber Python Praktiker bevorzugen vielleicht der Begriff „spät gebunden“ solche Verwechslungen zu vermeiden.

Ich denke, die weit verbreitetes Missverständnis, dass Python interpretiert wird, während Java kompiliert wird, entsteht, weil Java eine explizite Kompilierung Schritt hat - Sie haben Javac laufen Ihre .java-Quelldatei in eine .class Bytecode-Datei zu konvertieren, die ausgeführt werden können.

Wie Sie zu Recht in ähnliche Weise kompiliert Dateien in Bytecode Quelle Python weist darauf hin, aber es macht transparent es -. Kompilieren und Ausführen der Regel in einem einzigen Schritt durchgeführt wird, so dass es weniger offensichtlich für den Benutzer

Der wichtige Unterschied ist zwischen Anfang und Ende der Bindung und dynamischen & statischer Typisierung. Die kompilierte / interpretierte Unterscheidung ist bedeutungslos und irrelevant.

Zeitbindung ist, wenn Namen, um die Dinge gelöst bekommen. Weitere dynamische Sprachen neigen zu spät zu binden. Dies kann von Interpretation / Kompilation getrennt sein - zum Beispiel, Objective-C-Methoden sind spät und dynamisch im Vergleich zu C ++ behoben. Java ist viel davon an Klasse Ladezeit ist bindend: später als C aber früher als Python.

mein Lieblingszitat von Stan Kelly-Bootle des Computers widersprüchlich :

Bindungszeit n. In dem Moment, wenn die Hash-Tabelle beschädigt wird.

==> Fortschritte bei der Berechnung des gegen die „späte Bindung“ zugeordnet werden, das ich über meine eigene Denken hat sogenannte CS sogenannte Karriere: goldene Vergangenheit, grau Gegenwart und Zukunft rosig. Dies ist meine Version von Synge Optimismus: das Gras grüner ist außer bei t = 0. Auf EDSAC I wurden meine Funktionen (5ch Papier-Band-Subroutinen) gestanzt, an den Kanten, und etwa zwei Wochen vor der Eingabe gebunden. Dies ist bekannt aspremature Bindung und fordert deftness mit elastischen Bändern. Fortran kam als nächste mit einer neuen Art von Bindung: matschig Kartendecks, die gemischt werden verweigert. Dann mit Algol und C, I genossen statisch (Kompilierzeit-) Binden bis C ++ die betäubende Freude dynamischer gebracht (Laufzeit) zu binden. Meine aktuelle Forschung zielt darauf ab, verzögert die Bindung bis weit nach Ausführung. Ich nenne die endzeitliche Bindung, wie in St. Matthäusevangelium prophezeite: „... und alles, was ich soll auf Erde binden wird auch im Himmel gebunden sein ...“ (Matthäus 16:19 King James Version)

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top