Wird PHP kompiliert oder interpretiert?
142
PHP ist eine interpretierte Sprache. Die Binärdatei, mit der Sie PHP interpretieren können, wird kompiliert, aber was Sie schreiben, wird interpretiert.
Weitere Informationen finden Sie auf der Wikipedia-Seite für interpretierte Sprachen
Beide. PHP wird zu einem Zwischenbytecode kompiliert, der dann von der Laufzeit-Engine interpretiert wird.
Der PHP-Compiler hat die Aufgabe, Ihren PHP-Code zu analysieren und in eine für die Runtime-Engine geeignete Form zu konvertieren. Zu seinen Aufgaben gehören:
Abhängig von Ihrem PHP-Setup wird dieser Schritt normalerweise nur einmal ausgeführt, wenn das Skript zum ersten Mal aufgerufen wird. Die Compilerausgabe wird zwischengespeichert, um den Zugriff bei späteren Verwendungen zu beschleunigen. Wenn das Skript jedoch geändert wird, wird der Kompilierungsschritt erneut ausgeführt.
Die Laufzeit-Engine überprüft den AST und den Bytecode, wenn das Skript aufgerufen wird. In der Symboltabelle werden die Werte von Variablen gespeichert und die Bytecode-Adressen für Funktionen bereitgestellt.
Dieser Prozess des Kompilierens zu Bytecode und des Interpretierens zur Laufzeit ist typisch für Sprachen, die auf einer Art virtueller Laufzeitmaschine ausgeführt werden, einschließlich Perl, Java, Ruby, Smalltalk und anderen.
quelle
Im Allgemeinen wird es interpretiert, aber einige Zeit kann es als kompiliert verwenden und es erhöht wirklich die Leistung. Open Source-Tool zum Ausführen dieses Vorgangs: hhvm.com
quelle
PHP ist eine interpretierte Sprache. Es kann jedoch von Tools von Drittanbietern zu Bytecode kompiliert werden.
quelle
Ein kompilierter Code kann direkt von der CPU des Computers ausgeführt werden. Das heißt, der ausführbare Code wird in der Muttersprache der CPU angegeben
Der Code der interpretierten Sprachen muss zur Laufzeit von einem beliebigen Format in Anweisungen der CPU-Maschine übersetzt werden. Diese Übersetzung wird von einem Dolmetscher durchgeführt.
Es wäre nicht richtig zu sagen, dass eine Sprache interpretiert oder kompiliert wird, da Interpretation und Kompilierung beide Eigenschaften der Implementierung dieser bestimmten Sprache sind und keine Eigenschaft der Sprache selbst. So kann jede Sprache kompiliert oder interpretiert werden - es hängt nur davon ab, was die von Ihnen verwendete Implementierung bewirkt.
Die am weitesten verbreitete PHP-Implementierung wird von der Zend Engine unterstützt und ist einfach als PHP bekannt. Die Zend Engine kompiliert die PHP-Quelle in ein Format, das sie ausführen kann, sodass die Zend Engine als Interpreter fungiert .
quelle
Dies ist eine bedeutungslose Frage. PHP verwendet Yacc (Bison), genau wie GCC. yacc ist ein "Compiler-Compiler". Die Ausgabe von yacc ist ein Compiler. Die Ausgabe eines Compilers wird "kompiliert". PHP wird durch die Ausgabe von yacc analysiert. Es ist also per Definition kompiliert.
Wenn dies nicht zufriedenstellend ist, beachten Sie Folgendes. Sowohl php (die Binärdatei) als auch gcc lesen Ihren Quellcode und erstellen einen abstrakten Syntaxbaum. In den Versionen 4 und 5 geht PHP dann durch den Baum, um das Programm in Bytecode zu übersetzen (der Kompilierungsschritt). Sie können den Bytecode sehen, der mit dem Vulcan Logic Dumper in Opcodes (analog zur Assembly) übersetzt wurde . Schließlich interpretiert PHP (insbesondere die Zend-Engine) den Bytecode. Im Vergleich dazu geht gcc über den Baum und gibt die Assembly aus. Es können auch Assembler und Linker ausgeführt werden, um den Vorgang abzuschließen. Es ist bedeutungslos, ein Programm aufzurufen, das von einem "interpretierten" und ein anderes Programm von dem anderen "kompilierten" behandelt wird. Schließlich werden beide Programme mit beiden über einen "Compiler" ausgeführt.
Sie sollten tatsächlich die Frage stellen, die Sie stattdessen stellen möchten. ("Zahle ich eine Leistungsstrafe, wenn PHP meinen Quellcode für jede Anfrage neu kompiliert?" Usw.)
quelle
Ich weiß, dass diese Frage alt ist, aber sie ist überall verlinkt und ich denke, alle Antworten hier sind falsch (vielleicht weil sie alt sind).
Es gibt KEINE interpretierte oder kompilierte Sprache. Jede Programmiersprache kann interpretiert und / oder kompiliert werden.
Zunächst einmal ist eine Sprache nur ein Regelwerk. Wenn wir also über Kompilierung sprechen, beziehen wir uns auf bestimmte Implementierungen dieser Sprache.
HHVM ist beispielsweise eine Implementierung von PHP. Es verwendet die JIT-Kompilierung, um den Code in einen Zwischen-HipHop-Bytecode umzuwandeln und dann in Maschinencode zu übersetzen. Ist es genug zu sagen, dass es kompiliert ist? Einige Java-Implementierungen (nicht alle) verwenden auch JIT. Googles V8 verwendet auch JIT.
Die Verwendung der alten Definitionen von kompiliert und interpretiert macht heutzutage keinen Sinn mehr.
Eine Möglichkeit, sie abzugrenzen, ist (ich finde in dieser Dichotomie keine Bedeutung):
kompilierte Sprachen verwenden die Ahead of Time-Kompilierung (C, C ++);
interpretierte Sprachen verwenden die Just-in-Time-Kompilierung oder gar keine Kompilierung (Python, Ruby, PHP, Java).
quelle
in most cases
, ja. in allen Fällen nein. Sie können also keine Linie zeichnen, die semantisch bedeutsam und vereinbart ist.Zumindest wird der Code nicht so kompiliert (oder sollte ich sagen, optimieren), wie man es möchte.
Dieser Code ...
... verzögert das Programm bei jeder Ausführung gleich stark.
Es könnte festgestellt worden sein, dass es sich um eine Berechnung handelt, die nur beim ersten Mal durchgeführt werden muss.
quelle
Die akzeptierte Antwort ist offensichtlich falsch. PHP wird kompiliert. Ende der Geschichte. Vielleicht nicht zu nativen Anweisungen, sondern zu einem interpretierten Bytecode.
quelle