2010-08-28 16 views
7

Estoy leyendo el libro de Andrei Alexandrescu sobre el lenguaje de programación D. Es un excelente escritor y hace un buen trabajo explicando aspectos del lenguaje D. Sin embargo, encuentro ciertos constructos difíciles de entender cuando no puedo imaginar el resultado de ASM o las consecuencias de ciertas palabras clave (como in, out, etc. u otras construcciones). Aunque mi ASM es bastante malo y nunca lo uso, me ayuda mucho poder entender cómo ciertas palabras clave funcionan en la computadora y el trabajo que se realiza.compilador digital Mars D; adquiriendo la salida ASM

El compilador DMD tiene muchas características interesantes (cobertura de código, generación de interfaces (archivos de encabezado), generación de documentación, creación de perfiles, ...) pero no he visto un cambio para dar salida al código ASM. El compilador genera archivos .obj, y al leer el siguiente enlace: http://www.digitalmars.com/ctg/obj2asm.html Sospecho que necesito una herramienta para convertir los archivos de objeto manualmente. Yo preferiría un interruptor de compilación, ¿hay alguno?

En la parte inferior de esa página, me vinculan a una página donde puedo pagar los productos que mencionan que contienen esa herramienta. Viniendo de un fondo GNU, fruncí el ceño. ¿Esto es solo para C/C++, o esto también se aplica para el compilador D?

¿Hay alguna otra forma de convertir estos archivos .obj a código ASM legible, o debo recurrir a otros compiladores D (como GDC o LDC) para obtener salida ASM? Prefiero no hacerlo. DMD es creado por el propio fundador, estoy seguro de que implementó la mayoría de las funciones correctamente/en gran medida optimizado.

Entonces, ¿cómo puedo echar un vistazo al código ASM?

Gracias.

+3

Además, DMD es el único compilador con soporte completo para D 2.0 – You

Respuesta

7

Puede probar objconv. Es lo que uso El motivo por el que DMD no genera el ensamblador a través de un conmutador es porque nunca genera ASM como un paso discreto. Genera códigos de operación binarios directamente desde su representación interna. Esta es parte de la razón por la cual se compila muy rápido.

O puede utilizar la herramienta DMD obj2asm que viene empaquetada con DMD.

obj2asm somefile.o > somefile.s 
+1

Gracias, eso sí me da salida de ASM. –

+1

¿Hay alguna manera de reducir la salida de ASM a solo el código que yo mismo escribí? Por el momento, parece que el archivo objeto ha sido vinculado estáticamente a la biblioteca de D's, ¿es posible o debería simplemente vivir con él? –

+0

@daevius: Probablemente no hay mucho que puedas hacer aquí.Estos deberían ser instantaciones de plantilla, ya que el resto de Phobos no debería terminar en el mismo archivo objeto porque está compilado por separado. – dsimcha

-1

El compilador del Mars Digital Mars tiene licencia comercial, no de código abierto, quizás explicando por qué las herramientas relacionadas con la salida de back-end también son propietarias.

Para fines educativos, puede probar http://dgcc.sourceforge.net/, que es una interfaz D en el back-end de GCC, por lo tanto, fuente completamente abierta.

+1

compiladores All Digital Mars son (que yo sepa) disponible de forma gratuita; y el compilador D de referencia (DMD) está bajo una licencia GPL. La mayoría de sus herramientas también lo son. – You

+1

Solo la parte delantera es GPL. El back-end tiene licencia comercial. –

+0

@ Peter Alexander pero el [código fuente] (https://github.com/D-Programming-Language/dmd/tree/master/src/backend) está disponible sin embargo. –

9

La utilidad obj2asm es proporcionada por el conjunto de compiladores DMD, que está disponible de forma gratuita (con licencia GPL doble y artística). Consulte DMD Compiler for Linux en el sitio web de D Programming Language.

+1

Gracias, ¿entonces se requeriría un sistema operativo Linux para obtener fuentes ASM (o alguna otra herramienta)? No estoy seguro de por qué esto es solo Linux ... –