2009-07-06 13 views
3

Ich schreibe einen Tiger Compiler in F # und ich habe endlich den Punkt erreicht, wo ich die Entscheidung einer Zielarchitektur nicht mehr verschieben kann.Zielarchitektur für Tiger-Compiler

Dies ist mein erster Compiler, aber es wird definitiv nicht mein letzter sein. Also ... was wäre eine gute Zielarchitektur für einen ersten Compiler?

Ich habe über das Targeting der CIL (.NET) nachgedacht, aber der Zwischencode in the book scheint eher für eine Registermaschine geeignet.

Ich würde auch gerne wissen, wohin ich gehen soll, wenn ich diesen Compiler fertig habe. Sollte ich versuchen Targeting eine andere Architektur? Sollte ich mich auf einen anderen Teil des Compilers konzentrieren? Warum?

+0

Ich entschied mich, ein Back-End für x86 und vielleicht ein für MIPS später zu schreiben. Ich werde wahrscheinlich den ganzen Compiler nur noch zum Üben schreiben. –

Antwort

3

Aus reiner persönlicher Befriedigung gibt es keinen Ersatz für Targeting die Hardware, die Sie haben und und Ihren kompilierten Code auf dem blanken Metall laufen. Allerdings gibt es vernünftige Alternativen:

  • Die MIPS ist eine sehr saubere Befehlssatz und Simulatoren wie SPIM sind leicht verfügbar. Ihr Compiler wird einfach sein und Ihre Debugging-Erfahrungen sind relativ glücklich.

  • Je nachdem, warum Sie einen Compiler schreiben, können Sie gerne eine Low-Level-Compilerzielsprache wie LLVM oder C-- anvisieren. Aber warum sollte jemand anders den Spaß daran haben, dein Backend zu schreiben?

  • Wenn Sie Intel- oder AMD-Hardware haben, empfehle ich dringend, den 64-Bit-Befehlssatz mit SSE-Erweiterungen zu verwenden. Sie werden doppelt so viele Register haben, mit denen Sie spielen können, und Ihr Fließkomma-Code (falls vorhanden) wird normal sein.

1

Wenn Sie mit F #, um den Compiler zu schreiben, emittierende CIL klingt sicherlich wie eine gute Entscheidung, wie Sie in der Lage sein werden, alle integrierten Funktionen von CodeDOM zu verwenden usw.

Alternativ können Sie entwerfen Ihr eigenes Ausgabeformat und schreiben Sie eine VM, die in .NET ausgeführt wird, wenn dies die Ausgabe erleichtern würde (aufgrund einer geeigneteren Architektur). Es könnte einfacher sein, zu debuggen - obwohl es natürlich bedeutet, die VM auch zu schreiben :)

1

Haben Sie über das Targeting der x86-Assembly nachgedacht? Ich habe vor ein paar Jahren selbst einen Tiger-Compiler gemacht, und der Emitter der Versammlung, obwohl schwer zu schreiben, war eine der lohnendsten Sachen im ganzen Projekt. Eine eigene kleine VM in C zu schreiben ist auch eine gute (wenn nicht bessere) Idee.

Das Targeting einer vorhandenen VM ist pragmatisch, wenn Sie eine Produktionssprache erstellen, aber viele Lernmöglichkeiten aus der Übung entfernen.

Wenn ich Sie wäre, würde ich später im Projekt verschiedene Optimierungstechniken genauer betrachten.

+0

Ich habe tatsächlich über sowohl x86-Assembly als auch das Schreiben einer VM nachgedacht. Ich frage mich nur, ob eine RISC-Architektur für einen ersten Versuch besser sein könnte. Irgendwelche Gedanken? –

+1

Meine einzige RISC Erfahrung ist mit AVR Assembly, und ich liebe es. Es macht Spaß, ist sauber und einfach zu lernen.Ich weiß nicht viel über ARM oder PowerPC, würde aber vermuten, dass alles besser ist als x86 :) –

+0

+1 für wuub. Es ist wirklich eine gute Arbeit mit RISC als ersten Versuch, Sie könnten MIPS ausprobieren und SPIM für Simulationen verwenden. –