Ich höre oft den Begriff, dass Sprache A in Sprache B geschrieben ist. Beispielsweise wurde PHP in C geschrieben , C # ist in C ++ geschrieben .
Kann mir bitte jemand erklären, was das bedeutet und ob es überhaupt stimmt? Hat das etwas mit dem von der Sprache verwendeten Interpreter-Compiler zu tun?
Auf welchen Faktoren basiert außerdem die Wahl der Implementierungssprache?
s/written/implemented/
und es ist viel klarer.Antworten:
Die meisten Programmiersprachen fallen in zwei Kategorien: interpretierte und kompilierte Sprachen.
Eine kompilierte Sprache wird von einem Compiler in Maschinencode übersetzt , die Sprache, die die CPU direkt Schritt für Schritt ausführt. Eine interpretierte Sprache verwendet dagegen einen Vermittler, einen Interpreter , um den Sprachcode auszuführen. Der Interpreter selbst ist ein anderes Programm, das normalerweise selbst zu Maschinencode kompiliert wird.
PHP ist eine interpretierte Sprache. Sie benötigen ein separates Programm zu laufen PHP - Code, der Computer das Programm nicht direkt läuft. Dieses separate Programm, der PHP-Interpreter, ist selbst in C geschrieben.
C # ist eine kompilierte Sprache, die jedoch nicht zu Maschinencode kompiliert wird. Stattdessen wird es in einer speziellen Sprache (Bytecode) kompiliert, um auf einer virtuellen Maschine ausgeführt zu werden. Java ist ein weiteres Beispiel für eine solche Einrichtung. Sie könnten es als eine Mischung aus Kompilierung und Interpretation betrachten, bei der die virtuelle Maschine ein Interpreter ist. Die virtuelle Maschine für C # (die CLI oder Common Language Infrastructure ) ist in C ++ geschrieben.
Andere Beispiele sind:
quelle
Sie haben im Grunde recht. Wenn gesagt wird, dass Ruby in C geschrieben ist, bedeutet dies, dass der Sprachinterpreter und Teile der Kernbibliothek in C geschrieben sind.
Der Ruby-Interpreter ist also ein C-Programm, das eine Textdatei als Eingabe verwendet, verarbeitet und dann Funktionen aufruft, die sich entweder in einer anderen Textdatei befinden (sofern sie in Ruby geschrieben wurden) oder kompilierten C-Code enthalten, der über die erforderliche Grundfunktionalität verfügt Direkter Zugriff auf Systemressourcen wie Speicher, Dateisystem und mehr. Und einige Funktionen, die eine sehr hohe Leistung erfordern.
Sie haben also verschiedene Teile einer Sprache, die in anderen Sprachen geschrieben werden können oder müssen. Nichts würde Sie davon abhalten, den Interpreter in C und die Bibliotheken in C ++ zu schreiben (obwohl dies möglicherweise einige Dinge erschwert). Sie könnten sogar mehrere Schritte ausführen und eine Sprache verwenden, die sehr gut in der Textverarbeitung ist, um einige Zwischendaten zu generieren, die dann von einem C-Code verarbeitet werden.
Faktoren für die Entscheidung können dieselben sein wie für andere komplexe Anwendungen. Leistung ist eins. Die Fähigkeit, Code zu schreiben, der direkt auf andere Systemressourcen zugreifen kann. In den meisten Fällen muss es sich also um eine kompilierte Sprache handeln (obwohl Sie theoretisch einen Ruby-Interpreter in Python schreiben könnten). Die Verfügbarkeit auf verschiedenen Systemen ist wichtig, wenn Sie möchten, dass Ihre Sprache unter Linux, Win, OS X und anderen ausgeführt wird.
quelle
Es bedeutet einfach, dass der größte Teil des Kerns von Sprache A in Sprache B geschrieben ist. Welcher "Kern von Sprache A" sich von Sprache zu Sprache unterscheiden mag, aber im Allgemeinen bedeutet es, dass es sich um einen Compiler oder Interpreter handelt. Entscheidend für die Auswahl einer Sprache, in der eine andere Sprache geschrieben werden soll, ist wie bei fast jedem Projekt, mit welchen Sprachen die Entwickler besser vertraut sind.
Das heißt, "Sprache A ist in Sprache B geschrieben" ist eine Vereinfachung für die meisten modernen Sprachen. Wenn wir Python als Beispiel nehmen, während die Referenzimplementierung CPython tatsächlich in C geschrieben wurde, gibt es Implementierungen, die in anderen Sprachen geschrieben wurden, wie Jython (in Java geschrieben), IronPython (in C # geschrieben), PyPy (in Python geschrieben), CLPython (geschrieben in Common Lisp), Stackless Python (geschrieben in C und Python) und Unladen Swallow (geschrieben in C ++).
Eine Programmiersprache ist eine Definition, und wie das Python-Beispiel zeigt, gibt es keine wirklichen Einschränkungen für die Sprachen, in denen Compiler, Interpreter und Bibliotheken geschrieben werden können. Natürlich kann eine Sprache auch in sich selbst geschrieben werden. durch einen Prozess namens Bootstrapping .
quelle
string.lower(s)
ist es eine Python-Funktion, die das an delegiertreturn s.lower()
, das ist richtig. Die CPython 3.3-String-Case-Operationen werden in C.Aus der Perspektive der Verwendung einer Programmiersprache ist eine Programmiersprache nur ein Programm. Es kann sich um einen Compiler, einen Interpreter oder eine virtuelle Maschine handeln. All diese Dinge sind nur Computerprogramme und können daher in jeder Sprache geschrieben werden.
Wenn Sie also Ihre eigene PHP-Version erstellen möchten, können Sie mit einer beliebigen Sprache beginnen, die Sie am besten beherrschen. Sie würden dann ein Programm schreiben, das PHP-formatierten Code lesen und das tun kann, was die PHP-Spezifikation Ihrem Programm vorschreibt . Sie erstellen damit die PHP-Sprache in der Sprache X.
quelle
explode
die eine brauchtString
und eine zurückgibtArray
, ist ihre Implementierung (dh der Code, der den String bearbeitet, um das Array zu erzeugen) in C geschrieben , oder?Eine sehr ähnliche Formulierung mit völlig anderer Bedeutung ist "Schriftsprache A in Sprache B", zB "C in Java schreiben".
Dies beschreibt Code, der in einer Sprache syntaktisch korrekt ist, aber Strukturen, Redewendungen und Konventionen aus einer anderen Sprache verwendet. In dem Beispiel "Schreiben von C in Java" würden Zeichen dafür sein, dass alle lokalen Variablen über jeder Methode deklariert werden, wobei Integer-Konstanten anstelle von Aufzählungen verwendet werden, Bezeichner mit Unterstrichen usw. verwendet werden.
In der Regel passiert dies, wenn jemand lange mit einer Sprache gearbeitet hat (insbesondere, wenn er nur mit dieser Sprache gearbeitet hat) und in der aktuellen Sprache noch sehr neu ist (oder kein Interesse daran hat, sauberen Code zu schreiben).
quelle
Technologie ist ein inhärent iterativer Prozess. Wir beginnen mit einfachen Werkzeugen und verwenden diese dann, um bessere Werkzeuge zu entwickeln. Die ersten Assemblersprachen waren so ziemlich 1: 1-Übersetzungen der standardisierten Befehlsbytecodes für den Chip; Die 8086-Architektur und ihr Assembler dominierten andere Architekturen wie Z80, RISC usw., und so begannen wir, Sprachen zu entwickeln, die in die 8086-Assembly integriert werden konnten, wie FORTRAN, COBOL, Pascal und C. Das Programm, das den Quellcode von interpretiert Diese Sprachen müssen in etwas Primitiverem geschrieben sein, sonst kommt es zu einem Henne-Ei-Streit. Wenn der Quellcode für den ersten C-Compiler in C geschrieben wurde, was kompilierte dann diesen C-Quellcode und wäre das nicht per Definition der erste C-Compiler?
Grundsätzlich bedeutet "C # ist in C ++ geschrieben", dass die ersten und / oder beliebtesten Compiler- und Laufzeit- / Kernbibliotheken der Spezifikation der C # -Sprache entsprechen (Microsoft .NET Framework und der Befehlszeilencompiler) Programm CSC.exe) sind in C ++ geschrieben.
quelle
"Sprache A ist in Sprache B geschrieben" bedeutet, dass die einzige Implementierung von Sprache A (oder die einzige, die weit verbreitet ist) diejenige ist, die tatsächlich ein in Sprache B entwickeltes Projekt ist und die einzige vollständige, aktuelle Die Angabe von A ist der B-Quellcode, der ihn so implementiert, dass das B-Programm normalerweise als korrekt angesehen wird, wenn die Dokumentation und das B-Programm nicht übereinstimmen.
quelle