Continuo mi trabajo en mi compilador de C# para mi clase de compiladores. Por el momento, casi he terminado con los capítulos sobre Optimizaciones del compilador en mi libro de texto.¿Qué tipo de optimizaciones hacen tanto el compilador de C# como el JIT?
En general, mi libro de texto no tenía en mente la compilación Just-In-Time cuando estaba escrito y tengo curiosidad acerca de los tipos de optimizaciones estáticas previas al compilador de C# frente a lo que hace durante el proceso JIT?
Cuando hablo con la gente acerca de la compilación contra el CLR, normalmente escucho cosas como, "La mayoría de las optimizaciones son hechas por el JIT".
¿Hay cosas como desenrollado de bucle, plegado/propagación constantes, entrelazado de instrucciones hecho pre-Jit por el compilador de C# o manejado por el jitter? Si no son manejados por el jitter, ¿qué tipo de optimizaciones hace el jitter que son exclusivas de un compilador just-in-time?
La mayor parte de las optimizaciones que menciona son hechas por el jitter. El compilador de C# dobla constantemente porque eso es requerido por la semántica del lenguaje. El compilador de C# ejecutado con/o simplemente realiza optimizaciones simples de flujo de control de IL, como la eliminación de "rama a instrucción siguiente". Este es un buen tema; Veré si puedo criticar un artículo de blog sobre qué optimizaciones hacemos en el nivel de IL. Mira mi blog en el próximo mes más o menos para obtener más detalles. - –
@Eric Lippert, ¡Bonito! ¡No esperaba una respuesta de un desarrollador senior en el equipo compilador de Microsoft! Si lo recuerda, cuando haga su publicación en el blog, asegúrese de hacer un enlace desde aquí. Estaré vigilando de todos modos. Gracias Eric. – mmcdole
De nada. El artículo se publicará el 11 de junio. –