5

Ich arbeite zur Zeit in einer Programmiersprache für Haustiere (zu Lernzwecken) und habe im letzten Jahr eine Menge Forschung betrieben, und ich denke, es ist Zeit, endlich anzufangen Modellierung der Konzepte einer solchen Sprache. Zuallererst möchte ich, dass es zu einer Zwischenform wie JVM oder .NET-Bytecode kompiliert wird, wobei das Ziel eine Multiplattform-/Architekturkompatibilität ist. Zweitens möchte ich, dass es schnell ist (ich habe auch viele andere Dinge im Sinn, aber es ist nicht der Zweck dieses Themas, diese zu diskutieren).LLVM als virtuelle Maschine verwenden - multiplatform und multiarchitecture coding

Die besten Optionen, die mir in den Sinn kamen, waren: Compile zu JVM-Bytecode und verwenden OpenJDK als Laufzeitumgebung, Compile zu .NET-Bytecode und verwenden Mono als Laufzeitumgebung, Compile zu LLVM IR und verwenden LLVM als Laufzeitumgebung .

Wie Sie sich vielleicht vorgestellt haben, habe ich LLVM gewählt. Warum? weil es blitzschnell ist. Ich habe einen kleinen Benchmark mit dem C++ N-Body-Code gemacht, und erreichte 7s in meinem Rechner mit lli jitted IR, im Gegensatz zu 27s mit clan nativem kompilierten Code (ich weiß, dass clang zuerst IR dann Maschinencode macht).

Also, hier ist meine Frage: Gibt es eine weitervertreibbare Version des LLVM-Basis-Toolset (ich brauche nur lli), dass ich verwenden kann? Oder muss ich meine eigenen zusammenstellen? Wenn Letzteres, können Sie mir irgendwelche Hinweise zur Verfügung stellen, wie man es macht? Wenn ich es wirklich tun muss, denke ich daran, sie von meinem Rechner (Intel Mac) zu kompilieren und einige Installer zu erstellen (zB .msi für Windows, .rpm und .deb für populäre Linux Distributionen und .pkg für Macs). Denken Sie daran, ich brauche nur eine minimale Teilmenge von LLVM, so dass diese Teilmenge in der Lage ist, sich wie eine VM zu verhalten, indem Sie "lli" verwenden. Die eigentliche Frage ist, wie man LLVM als typische virtuelle Maschine einsetzen kann.

+0

Das LLVM-Projekt hat eine permissive Lizenz; Es klingt, als müssten Sie nur die ** Core Libraries ** verteilen. –

+0

@RobertHarvey Das ist, was ich dachte, kaufen Ich habe keine Ahnung, wo ich anfangen soll. – Salvia

+0

Es versteht sich von selbst, dass Sie die Dokumentation sowieso lesen müssen, und da Sie Ihre Entscheidung bereits getroffen haben ... bin ich begeistert, selbst mit LLVM zu arbeiten; Leider habe ich die Dokumentation noch nicht gelesen. –

Antwort

4

Zuerst denke ich, alle 3 Optionen - LLVM IR + LLVM, Java Bytecode + OpenJDK und .NET CIL + Mono - sind ausgezeichnete Optionen, und ich stimme zu entscheiden zwischen ihnen ist nicht einfach.

Wenn Sie für LLVM gehen und Sie nur lli verwenden möchten, können Sie LLVM auf Ihre Zielplattform kompilieren und die resultierende lli ausführbare Datei mit Ihrer Distribution packen, es sollte funktionieren.

Eine andere Möglichkeit, einen JIT-Compiler über LLVM zu schreiben, ist die Verwendung einer Ausführungs-Engine - see the handy examples in the Kaleidoscope tutorial. Das bedeutet, dass Sie Ihr eigenes Programm schreiben, das JIT-kompiliert Ihre eigene Sprache, kompilieren Sie es auf welche Plattform Sie wollen, während es statisch mit LLVM verknüpfen, und dann verteilen Sie es.

Da ein JIT-Compiler das Kopieren einer LLVM-Binärdatei auf die Clientseite erfordert, müssen Sie auf jeden Fall einen Copyright-Hinweis an Ihre Distribution anhängen (Sie müssen Ihre Distribution jedoch nicht öffnen).

+0

Danke, der von Ihnen verlinkte Artikel war sehr hilfreich, ich kann ihn als Ausgangspunkt verwenden. – Salvia

+0

Der Link ist gebrochen – rraallvv

+0

@rraallvv behoben, danke! – Oak