Frage

Ich bin daran interessiert, die Durchführung ein Forth-system, nur so kann ich einige Erfahrung im Aufbau einer einfachen VM und runtime.

Beim Start in Weiter man in der Regel lernt über den stack und seine Betreiber (DROP DUP, SWAP, etc.) Erstens, so es ist Natürliche zu denken, diese als unter den primitiven Operatoren.Aber Sie sind es nicht.Jeder von Ihnen kann zerlegt werden in den Operatoren, die direkt manipulieren von Speicher-und stack-Pointer.Später erfährt man etwas über die speichern (!) und fetch ( @ ), die können verwendet werden zu implementieren, DUP, SWAP, und so weiter (ha!).

Also, was sind die primitiven Operatoren?Welche umgesetzt werden müssen, direkt in der runtime-Umgebung, aus denen alle anderen aufgebaut werden kann?Ich bin nicht daran interessiert, hohe Leistung;Ich möchte etwas, das ich (und andere) lernen können.Betreiber Optimierung kann später kommen.

(Ja, ich bin mir bewusst, dass ich anfangen kann mit einer Turing-Maschine und gehen von dort aus.Das ist ein bisschen extremer.)

Edit:Was ich bin mit dem Ziel für verwandt ist bootstrapping ein Betriebssystem oder einen neuen compiler.Was muss ich tun, umsetzen, mindestens, so, dass kann ich bauen den rest des Systems aus diesen primitiven Bausteine?Ich werde das nicht implementieren, die auf bare-hardware;als eine erzieherische Aufgabe, würde ich schreiben, meine eigenen minimal-VM.

War es hilfreich?

Lösung

Dieser thread deckt Ihre genaue Frage.Hier ist eine soup-to-nuts-Umsetzung mit kompletter Dokumentation.

Ich schrieb eine subroutine threaded Her targeting 68K als ich im college war.Ich definierte die runtime-Umgebung und-Wörterbuch-format, schrieb dann einige C-code, der boot-geschnallt ein Macintosh-Anwendung, die geladen ein Standard-Wörterbuch, aufgefüllt, einige I/O-Vektoren und habe den code ausgeführt.Dann nahm ich den Leo Brodie Buch Start Her und begann mit der Umsetzung der basic-Wörterbuch in 68K-Assembler-Sprache.Ich begann mit der Arithmetik - /Logik-Worte, dann Taten-control-Strukturen word definition/manipulation Worte.Mein Verständnis ist, dass zumindest müssen Sie @, !, +, -, * und /.Der rest kann implementiert werden, aber das ist wie der Versuch, zu schreiben, eine ganze Grafik-Bibliothek basiert auf SetPixel und GetPixel:es wird funktionieren, aber Huch, warum?

Ich genoss den Prozess, denn es gab einige wirklich interessante Rätsel, wie immer DOES> genau (und einmal hatte ich einen festen DOES> Umsetzung, ich war die Schaffung von Verschlüssen, die sich in winzigen, winzigen Mengen-code).

Andere Tipps

Vor langer Zeit hatte ich ein Buch mit dem Titel "Gewinde Interpretierende Sprachen", veröffentlichte ich denke, Byte, die erörtert, wie die Umsetzung einer Her-wie die Sprache (ich glaube nicht, dass Sie jemals nannte es Her) in Z80 assembly.

Sie können nicht haben Z80-praktisch, oder möchten ein, aber das Buch ist aufschlussreich.

Diesen post am comp.lang.weiter listet einige dieser "minimal-Forths".

http://groups.google.com/group/comp.lang.forth/msg/10872cb68edcb526

Warum weiß ich das?Mein Bruder, Mikael, schrieb #3 und er schrieb auch eine Papier über eine "minimale Her" (auf Schwedisch, obwohl).Wenn ich mich richtig erinnere, er wollte einen minimalen Satz von Operatoren, die gebaut werden könnten, die in Silizium.

Ich bin immer noch nicht davon überzeugt, die Frage ist gut-gegründet.Für Beispiel, Sockel Anweisungen reduziert werden kann;nach alle, * und / können implementiert werden + und -, aber dann " + " können realisiert werden in Bezug auf die Nachfolger-Funktion (siehe Peano-Axiome.) Das versetzt Sie in die Nachbarschaft von einer Turing-Maschine.Wie Sie wissen, wo zu stoppen?

Möglicherweise möchten Sie auch einen Blick auf Hans Bezemer s 4. compiler.

Die Forth-Implementierung verwenden Sie, dass nicht geben Sie diese Informationen in der Dokumentation?Angesichts der Art Her, es könnte werden von der Implementierung abhängig.Es gibt ein standard-set von Wörtern im Wörterbuch, aber ob Sie dort ankamen, von der Montage/C/whatever oder Her, sollte keine Rolle spielen, da Her ist per definition ein selbst-erweiterbare Sprache.

Im Gegensatz zu dem, was Sie sagen, in der Regel DROP, SWAP, etc. sind als grundlegende Forth-Operationen.Der Grund dafür ist, dass, wenn Sie Sie umsetzen mit memory-Operationen, wie Sie vorschlagen, das gesamte system wird mehr, nicht weniger kompliziert.Auch gibt es keine klare Unterscheidung in Her zwischen dem, was ist einfach und was nicht.In den 80er Jahren ein Wörterbuch wäre einfach, und coded in assembler für Geschwindigkeit, während eine moderne linux gehostet sich leisten können, um code, der in so genannte " high level.Auch Forthers neigen routinemäßig recode assembler Worte in high-level und high-level-Wörter in assembler.Ich bin der Autor von ciforth und yourforth.Es ist möglich, zu definieren <= wie " > "nicht" als ich in ciforth .Aber in yourforth ich beschloss, dass alle < <= > >= so ähnlich, gleichmäßig aussehende, kleine assembler-Routinen, war tatsächlich einfacher.Das ist eine Entscheidung und eine Frage des Geschmacks, natürlich nicht grundsätzlich.

Im Kontext interpretiere ich die Frage so:"Was ist eine angemessene Größe für die Anzahl der primitiven Operationen zu erreichen, eine angemessene leistungsfähige Her mit einer vernünftigen Geschwindigkeit?" Klar, Sie sind nicht daran interessiert clevere tricks, um loszuwerden, eine assembler-Wort auf Kosten der enormen overhead, wie in einigen threads über dieses Thema.

Nun kann man sich an eine Reihe von kleinen Her ist wie jonesforth yourforth eforth und schließen daraus, dass meist kommt man auf rund 50 bis 100 primitiven.Diejenigen Her, die definiert sind in assembler.Wenn Sie wollen, um zu definieren, Ihre primitive in c, python oder Java , ist die situation wieder anders.Jetzt für z.B.die über die Wörterbuch-Suche haben Sie die Wahl zwischen c und Her.Überlegungen, die nichts mit Sprache zu tun design ins Spiel kommen.Sie können ein produktiver c-Programmierer, oder Sie bestehen Sie auf mit der Programmierung in Forth, weil es ist ein Lern-Projekt.

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