2017-03-10 1 views

Antwort

4

OCaml hat eine lange Geschichte, und war nicht immer OCaml. Früher war es CAML, vielleicht noch früher war es etwas anderes. Wie auch immer, wenn Sie alle diese Sprachen früherer Formen von OCaml aufrufen, geht die Geschichte wahrscheinlich ungefähr so. (Anmerkung: Ich war nicht dort, aber ich habe einen Compiler mehr oder weniger auf diese Weise einmal gebaut.)

Vor langer Zeit schrieben einige Menschen den ersten OCaml Compiler in einer anderen Sprache als OCaml. Es kompilierte OCaml zu Bytecodes einer virtuellen Maschine. Diese Vorfahren haben dann den Compiler in OCaml umgeschrieben und den ersten OCaml-Compiler benutzt, um den zweiten Compiler zu kompilieren (geschrieben in OCaml). Dies gab ihnen eine Bytecode-Darstellung eines OCaml-Compilers. Das ist im Wesentlichen, was in boot/ocamlc ist.

Wenn Sie eine virtuelle Maschine Implementierung in einer anderen Sprache als OCaml (in C, sagen) schreiben, können Sie die VM auf einem beliebigen Computer mit einem C-Compiler und führen Sie die Bytecode-Compiler OCaml darauf aufbauen und ausführen. Sie haben also eine funktionierende OCaml-Implementierung auf jedem System mit einem C-Compiler.

In der Tat diese virtuelle Maschine in C codiert existiert und heißt ocamlrun.

Wenn Sie vorsichtig sind keine neuen Funktionen nutzen zu früh, können Sie den zweiten OCaml-Compiler (codiert in OCaml) ändern und neue Funktionen hinzuzufügen. Sie kompilieren es einfach mit dem vorherigen OCaml-Compiler und kompilieren es dann erneut mit sich selbst (um Verbesserungen zu nutzen). Nach diesen beiden Kompilierungen können Sie beginnen, die neuen Funktionen zur Implementierung des Compilers selbst zu verwenden.

Da Sie später auf diese Weise die Compiler erweitern und verbessern, können Sie in der Regel mit einem Compiler für eine kleine Teilmenge der eventuellen Zielsprache beginnen. So müssen Sie nicht mehr so ​​viel in der Originalsprache arbeiten. Nachdem Sie einen funktionierenden Compiler bekommen haben, der in OCaml codiert ist, werden Sie den ursprünglichen Compiler wegwerfen, so dass es keinen Sinn macht, es komplizierter als nötig zu machen.

Wenn Sie nicht möchten, boot/ocamlc zu verwenden, scheint es, als müssten Sie Ihren eigenen OCaml-zu-Bytecode-Compiler von Grund auf in einer anderen Sprache schreiben, die Ihnen zur Verfügung steht. Sie können die Bytecodes immer noch mit ocamlrun ausführen.

Es ist in der Regel ziemlich hart zurück und finden Sie den Original-Bootstrap-Compiler zu gehen (in einer anderen Sprache geschrieben, wahrscheinlich für eine sehr kleine Teilmenge von OCaml heutigen). Aber vielleicht ist es irgendwo da draußen ...

+1

Sie sollten die "alten", es ist alles Xavier Leroy's Arbeit, und es begann in commit [61bd8ace6] (https://github.com/ocaml/ocaml/commit/ 61bd8ace6). – Drup

+0

Sorry, ich wollte einen mythologischen Effekt haben. Kein leichtes Ziel für Xavier Leroy's erstaunlich gute Arbeit. –

+0

Vielen Dank! –