Frage

Ich möchte eine kompilierte Sprache machen. Ich prüfe derzeit Backends. Bisher habe ich bei C Suche wegen seiner Geschwindigkeit der Ausführung, Kompilieren und ein kleiner, einfach Compiler zu verwenden, genannt TCC.

Nachdem die Diskussionen hier über die Verwendung als Zwischensprache lesen, ich versuche, darüber nachzudenken, wie es mit der Garbage Collection kompatibel zu machen, und Behandlung von Ausnahmen. Bisher glaube ich beide lösen kann, aber mit viel Aufwand.

Hier sind einige meiner Gedanken auf den anderen möglichen Backends:

  1. Montage. Unportable und insgesamt Schmerz zu programmieren in
  2. .NET: Man fühlt sich sehr langsam. 5 Sekunden zu starten und 5 Sekunden 1 + 2 auf Ironpython und Boo zu bewerten. Nicht in der Lage, ohne große Bibliothek zu laufen.
  3. JVM: Man fühlt sich ein bisschen langsam. Kein Zugriff auf binäre Bibliotheken. Nicht in der Lage, ohne große Bibliothek zu laufen.
  4. LLVM: Keine Fenster Unterstützung. Ich höre, dass kompilierte ausführbare Größe 16 mb +
  5. C--: sieht unterentwickelt
  6. .
  7. C ++: vielleicht. Kann nicht eine nette kleine Freien finde ich mit. Bündeln

Kann jemand von euch meine Meinung ändern oder mehr hat zu dieser Liste hinzufügen?

Bearbeiten

Ich habe vor kurzem mit LLVM experimentiert. Ich fand heraus, dass sie vorkompilierte Binaries und dass es möglich ist, auf native Montage zu kompilieren.

http: //www.antlr. org / wiki / Anzeige / CS652 / Erstellen + Maschine + ausführbare + Binärdateien + mit + LLVM

Hier sind die Schritte:

  1. Ausführen llvm-as auf LLVM Versammlung, die eine LLVM Bytecode-Datei ergibt.
  2. Ausführen llc auf der LLVM Bytecode-Datei eine Baugruppendatei zu erhalten.
  3. Führen Sie einen Assembler auf der Baugruppendatei eine Objektdatei zu erhalten. (Oder Lauf llvm-ld, die auf einem extern installierten C-Compiler abzuhängen)
  4. Übersetzen auf ausführbare Datei mit gcc etc.
War es hilfreich?

Lösung

Haben Sie darüber nachgedacht ein Frontend zu schreiben für GCC ? Ich erwähne dies zuliebe nur die Vollständigkeit halber - soweit ich die Backend-Schnittstelle weiß ziemlich kompliziert ist und die Code-Basis ist sehr groß und schwer zu begreifen

.

Auf der anderen Seite ist GCC ein ausgereiftes Produkt mit vielen Experten-Programmierern daran zu arbeiten. Zumindest sieht es wahrscheinlich die solide Grundlage aller Alternativen.

Ich persönlich würde es vorziehen, LLVM (spannende Architektur) oder .NET der IL: sehr, sehr einfach zu bedienen, hat eine großen Werkzeugträger ( Reflector , Cecil , REFLEXIL und last but not least, API .NET Reflexion) und zwei sehr effiziente Implementierungen (nämlich Microsofts kanonische Implementierung und Mono ).

Aber ich kann nicht Know-how in eines der Architekturen Anspruch so nehmen Sie diese Antwort mit einem Körnchen Salz.

Andere Tipps

In diesem Fall LLVM ist wahrscheinlich eine bessere Wahl.

LLVM Windows-Unterstützung hat, es dauert nur einige Zeit zu kompilieren

C ++ werden Sie nicht viel, verwenden Sie C statt. Aber wenn Sie Sie die Sprache wollen im Web, verwenden .NET oder Java verwendet werden, dass sie langsam laden, aber wenn sie sind, sie so schnell wie C.

Smart verwenden wir C als Back-End.

Tcc ist eine sehr gute Option für entwicklungs- wenn auch nicht für die endgültige Freigabe (das produzierte Objekt gcc -O0 entspricht)

Eine weitere zur Liste hinzuzufügen: Slava Smalltalk vor kurzem implementiert auf Factor Backend . Ich habe das selbst nicht versucht, aber ich habe das Gefühl, es mehr die Funktionen bieten, die Sie von den höheren Ebene diejenigen wollen mit mehr wie die Größe / Leistung aus den untergeordnet denjenigen.

TCC ist die beste Wahl. Es ist tragbar und es verfügt über eine Bibliothek, so dass es leicht als Backend verwendet werden kann, die libtcc genannt wird. Die ausführbaren Dateien sind kleiner als gcc und es ist ANSI C.

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