25 Stimmen

Bootstrapping einer Sprache auf LLVM

Ich bin Bootstrapping eine Programmiersprache Compiler auf LLVM oben. Derzeit bin ich vor allem fertig schreiben einen Compiler für eine Teilmenge von C, die selbst-kompilierend ist. Wenn ich damit fertig bin, werde ich Bootstrap meine Sprache weg von C, Aufrechterhaltung der Selbstkompilierung, wie ich gehe.

Da der Compiler selbstkompilierend ist, muss ich alle Funktionen von C, die ich verwende, auch implementieren. Es ist also ein ständiges Abwägen: Wenn ich zu viele Funktionen verwende, muss ich mehr implementieren als ich will, aber wenn ich nicht genug Funktionen implementiere, wird es schwierig, Code zu schreiben.

Ein solches Merkmal sind die LLVM-Bindings. Die Erzeugung von LLVM-Zwischendarstellungen ohne die LLVM-C-Bindings ist schwierig. Wenn ich jedoch die LLVM-Bindings verwende, muss ich sie erneut implementieren, wenn ich von C weggehe.

Ich habe hier einige Schwierigkeiten und suche daher nach alternativen Lösungen. Irgendwelche Ideen?

10voto

Richard Pennington Punkte 19289

Sie könnten die LLVM C Bindungen verwenden, aber das erfordert, dass Ihre Sprache genug C verstehen, um das zu tun.

Eine andere Alternative ist, LLVM-Assemblersprache (eine Textdatei) zu schreiben und llvm-as zu verwenden, um diese in Bitcode umzuwandeln.


Bearbeiten:

Ich wieder lesen Sie Frage, ich denke, Sie verstehen bereits die llvm-as vs. Bindung Zeug.

Ihre Sprache wird wahrscheinlich sowieso in der Lage sein wollen, an C zu binden, um Bibliotheken usw. zu unterstützen. Verwenden Sie die C-Bindungen für jetzt und schreiben Sie Ihre eigenen Bindungen, wenn Sie weiter kommen.

5voto

plan9assembler Punkte 2876

1voto

tangentstorm Punkte 6993

Irgendwann werden Sie wahrscheinlich eine API für das Wrapping von C-Bibliotheken als Erweiterungsmodule bereitstellen wollen. LLVM kann dies bereits unterstützen (ich weiß, dass der Papagei vm tut). Warum nicht verwenden, was auch immer Erweiterung System, das Sie verwenden, um LLVM's eigene API zu wickeln? Sie können bereits unterstützen, dass, auch :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X