Ventajas de los códigos de bytes basados ​​en la pila o las máquinas de registro infinito

compiler-construction expression-trees intermediate-code

Pregunta

Los compiladores a menudo eligen representaciones intermedias (IR) que son basadas en pila o registro infinito. ¿Cuáles son las ventajas de estos árboles de expresión excesiva?

Respuesta popular

Los árboles de expresiones funcionan para expresiones, pero no son efectivos para modelar todo el programa. En particular, una buena representación de un programa es realmente un gráfico (de operaciones y acciones) conectado por el control y los flujos de datos. Por lo general, las personas hablan sobre el uso de "triples" que forman exactamente tal gráfico.

El código de la máquina de la pila es fácil de generar para el front-end, pero es más difícil para el eventual proceso de asignación del registro necesario para generar un código real, porque tiene un conjunto de ubicaciones temporales ("la pila") que no tienen nada que ver claramente con la arquitectura de destino , y hacer que los flujos de datos sean inconvenientes de procesar. ("¿Qué código utiliza el resultado de este complemento?").

Las máquinas de registro son un poco más difíciles para generar código, pero tienden a preservar el flujo de datos al usar esos registros infinitos como cables de flujo de datos esencialmente. El flujo de datos y la capacidad de asignarlo fácilmente a registros reales (hay una asignación de registro estándar "por coloración de gráfico") hace que sea relativamente fácil generar un buen código.

Si decide generar código de máquina virtual directamente a partir de estos, obtendrá diferentes características de rendimiento. Esencialmente, las máquinas de pila tienden a tener huellas de código más pequeñas. Las máquinas de registro infinito tienden a obtener una ejecución interpretativa rápida. Dalvik de Google es diferente de la JVM precisamente por esta razón. (Tal vez ellos no quisieron ser demandados por Sun / Oracle por formatos de archivo de clase, también).

Sugiero el siguiente documento: Virtual Machine Showdown: Stack Versus Registers . (PD: cualquier cosa con Anton Ertl como autor tiende a ser una lectura interesante).



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow