2010-08-28 7 views
7

Ich lese das Buch von Andrei Alexandrescu über die D-Programmiersprache. Er ist ein ausgezeichneter Autor und erklärt ziemlich gut Aspekte der D-Sprache. Ich finde jedoch, dass bestimmte Konstrukte schwer zu verstehen sind, wenn ich mir die ASM-Ausgabe oder die Konsequenzen bestimmter Schlüsselwörter (wie In, Out usw. oder anderer Konstrukte) nicht vorstellen kann. Obwohl mein ASM ziemlich schlecht ist und ich ihn nie benutze, hilft es mir sehr, zu verstehen, wie bestimmte Schlüsselwörter für den Computer und die Arbeit funktionieren.Digitaler Mars D Compiler; ASM Ausgabe

Der DMD-Compiler hat viele interessante Features (Code-Coverage, Generierung von Schnittstellen (Header-Dateien), Generierung von Dokumentation, Profilerstellung, ...), aber ich habe keinen Schalter zur Ausgabe von ASM-Code gesehen. Der Compiler erzeugt OBJ-Dateien und liest folgenden Link: http://www.digitalmars.com/ctg/obj2asm.html Ich vermute, dass ich ein Werkzeug brauche, um die Objektdateien manuell zu konvertieren. Ich würde einen Compiler-Schalter bevorzugen, gibt es einen?

Am Ende dieser Seite, ich bin mit einer Seite verbunden, wo ich für die Produkte zahlen kann, die dieses Werkzeug enthalten. Aus einem GNU-Hintergrund kommend, habe ich das sehr missbilligt. Ist das nur für C/C++, oder gilt das auch für den D-Compiler?

Gibt es eine andere Möglichkeit, diese OBJ-Dateien in lesbaren ASM-Code zu konvertieren, oder muss ich auf andere D-Compiler (wie GDC oder LDC) zurückgreifen, um ASM-Ausgabe zu erhalten? Ich bevorzuge es nicht. DMD wird vom Gründer selbst erstellt, ich bin mir sicher, dass er die meisten Funktionen korrekt/weitgehend optimiert implementiert hat.

Also, wie kann ich einen Blick auf den ASM-Code werfen?

Vielen Dank.

+3

Zusätzlich ist DMD der einzige Compiler mit voller Unterstützung für D 2.0 – You

Antwort

7

Sie könnten versuchen objconv. Es ist was ich benutze. Der Grund dafür, dass DMD Assembler nicht über einen Switch ausgibt, liegt darin, dass ASM niemals als eigenständiger Schritt generiert wird. Es erzeugt binäre Opcodes direkt aus seiner internen Darstellung. Dies ist einer der Gründe, warum es so schnell kompiliert.

Oder Sie können das DMD obj2asm Werkzeug verwenden, das mit DMD geliefert wird.

obj2asm somefile.o > somefile.s 
+1

Danke, das gibt mir tatsächlich ASM-Ausgabe. –

+1

Gibt es eine Möglichkeit, die ASM-Ausgabe auf den Code zu reduzieren, den ich selbst geschrieben habe? Im Moment scheint die Objektdatei statisch mit der Ds Bibliothek verbunden zu sein, ist das möglich oder sollte ich einfach damit leben? –

+0

@daevius: Es gibt wahrscheinlich nicht viel, was du hier tun kannst.Dies sollten Template-Instantiierungen sein, da der Rest von Phobos nicht in der gleichen Objektdatei enden sollte, weil er separat kompiliert wird. – dsimcha

-1

Das Backend des Digital Mars-Compilers ist kommerziell lizenziert, nicht Open Source. Dies erklärt möglicherweise, warum auch Tools für die Backend-Ausgabe proprietär sind.

Für pädagogische Zwecke könnten Sie versuchen, http://dgcc.sourceforge.net/, die ein D-Frontend auf dem GCC-Backend ist, also vollständig Open Source.

+1

All Digital Mars Compiler ist (AFAIK) kostenlos zur Verfügung; und der Referenz-D-Compiler (DMD) steht unter einer GPL-Lizenz. Die meisten ihrer Werkzeuge sind auch. – You

+1

Nur das Frontend ist GPL. Das Backend ist kommerziell lizenziert. –

+0

@Peter Alexander aber der [Quellcode] (https://github.com/D-Programming-Language/dmd/tree/master/src/backend) ist trotzdem verfügbar. –

9

Das obj2asm-Dienstprogramm wird von der DMD-Compiler-Suite bereitgestellt, die kostenlos erhältlich ist (unter einer dualen GPL- und Artistic-Lizenz). Siehe DMD Compiler for Linux auf der Website der Programmiersprache D.

+1

Danke, also wäre ein Linux-Betriebssystem erforderlich, um ASM-Quellen (oder ein anderes Tool) zu erhalten? Ich bin nicht sicher, warum das nur Linux ist ... –