Frage

  

Mögliche Duplikate:
   Wie kann eine Sprache des Compilers in dieser Sprache geschrieben werden?
   einen Compiler in „selbst“

Umsetzung

Ich war auf der Suche auf Rubinius , eine Ruby-Implementierung, dass sie erstellt Bytecode einen Compiler in Ruby geschrieben werden. Ich kann meinen Kopf nicht um diesen erhalten. Wie schreibt man einen Compiler für eine Sprache in der Sprache selbst? Es scheint, wie es nur Text, ohne etwas zu sein, wäre es in eine ausführbare Datei zu kompilieren, die dann über die Zukunft Code geschrieben in Ruby kompilieren konnte. Ich werde verwirrt gerade diesen Satz eingeben. Kann das jemand erklären helfen?

War es hilfreich?

Lösung

Zur Vereinfachung: Sie zunächst einen Compiler für den Compiler schreiben, in einer anderen Sprache. Dann kompilieren Sie die Compiler, und voila!

Sie müssen also, eine Art von Sprache, die bereits einen Compiler hat - aber da gibt es viele solche sind, können Sie den Ruby-Compiler Compiler schreiben beispielsweise (!) in C, die den Ruby-Compiler kompilieren, die Ruby-Programme kompilieren können auch weitere Versionen von sich selbst.

Natürlich wurden die ursprünglichen Compiler in Maschinencode geschrieben, kompiliert Compiler für die Montage, die wiederum zusammengestellt Compiler für z.B. C oder Fortran, die kompiliert Compiler für ... so ziemlich alles. Iterative Entwicklung in Aktion.

Der Prozess wird als Bootstrapping - möglicherweise benannt nach Geschichte Baron Münchhausen, in dem er mich aus diesem herausgezogen ein Sumpf von seinen eigenen Haaren aus dem Sumpf:)

Andere Tipps

Im Hinblick auf das Bootstrapping eines Compilers ist es lesenswert über diesen teuflisch cleveren Hack.

http://catb.org/jargon/html/B/back- door.html

Ich werde verwirrt gerade diesen Satz zu lesen.

Es kann helfen, den Compilers als Übersetzer zu denken, die Compiler häufig genannt werden. Sein Zweck ist es Quellcode zu nehmen, die Menschen lesen können und es in einen Binärcode übersetzt, dass Computer lesen kann. Im Falle von Rubinius, geschieht der Code, dass es liest Ruby-Code zu sein, und der Code, dass es wandelt sie in Maschinencode ist (eigentlich Maschinencode LLVM die weiter selbst in Intel Maschinencode kompiliert, aber das ist nur ein Hintergrund-Detail) . Rubinius selbst geschrieben wurden, konnte in fast jeder Programmiersprache. Es ist einfach passiert in der gleichen Sprache geschrieben worden sein, dass es kompiliert wird.

Natürlich müssen Sie etwas Rubinius in erster Linie laufen, und dies höchstwahrscheinlich ein reguläres Ruby-Interpreter. Beachten Sie jedoch, dass, wenn Sie in der Lage sind Rubinius auf einen Dolmetscher laufen, können Sie es seine eigenen Quellcode passieren, und es wird eine kompilierte Version von sich selbst erstellen und ausführen. Dies nennt man Bootstrapping, aus dem alten Satz „sich nach oben ziehen von den Haaren aus dem Sumpf“.

Ein letzter Hinweis: Programme Rubin kann nicht invoke beliebigen Code. Der Teil des Rubinius ist eigentlich in C ++ geschrieben.

Nun, es ist möglich, es in der folgenden Reihenfolge zu tun:

  1. einen Compiler in jeder Sprache schreiben, sagt C für Ruby-Code.
  2. Nun, da Sie Ruby-Code kompilieren, können Sie einen Compiler schreiben kann, dass compiles Code Ruby und kompilieren diesen Compiler mit dem C-Compiler in Schritt schrieb 1. Wahh dieser Satz ist seltsam!
  3. Von nun an sie alle in 2. geschrieben Ihrem Ruby-Code mit dem Compiler kompilieren können:)

Haben Sie Spaß! :)

Ein Compiler ist nur etwas, dass Transformationen Quellcode in eine ausführbare Datei. So doen't es egal, was sie geschrieben ist -. Kann es die gleiche Sprache sein sie oder eine andere Sprache mit ausreichender Leistung kompilieren

Der Spaß kommt, wenn Sie einen Compiler für eine Sprache für eine Plattform, geschrieben in der Sprache schreiben, die noch nicht einen Compiler für Ihre Implementierung Sprache hat. Ihre Entscheidungen sind hier auf einer anderen Plattform zu kompilieren, für die Sie einen Compiler nicht installiert haben, oder einen Compiler in einer anderen Sprache schreiben, und verwenden, die die „echten“ Compiler zu kompilieren.

Es ist ein Prozess mit 2 Schritten:

  1. ein Ruby-Compiler in einem anderen lanaguage wie C schreiben, ein Ruby-Compiler vorausgesetzt, existiert noch nicht
  2. , da Sie jetzt ein Ruby-Compiler haben, können Sie ein Ruby-Programm schreiben, das a (neu) Ruby Compiler

Da jemand bereits einen Ruby-Compiler (Matz) schrieb, Sie „nur“ den zweiten Teil zu tun. Leichter gesagt als getan.

Alle Antworten haben bisher erklärt, wie der Compiler Bootstrap durch einen anderen Compiler verwenden. Allerdings gibt es eine Alternative: die Compiler von Hand kompilieren. Es gibt keinen Grund, warum der Compiler von einer Maschine ausgeführt wird, kann es genauso gut von einem Menschen durchgeführt werden.

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