Microsoft Phoenix era un SDK disponible en Microsoft Connect para crear compiladores, optimizar código y realizar análisis de código. Microsoft lo describió en tiempo pasado el 1 de julio de 2008. [1]
[Estaba] destinado a ser utilizado como back-end para futuras tecnologías de compilación de Microsoft . [8] También [estaba] disponible como SDK , una versión preliminar del cual se ha hecho accesible, para crear compiladores y herramientas de análisis de código utilizando el marco Phoenix.
Microsoft Phoenix define una representación intermedia (IR) para programas, utilizando AST , gráficos de flujo de control y un modelo de manejo de excepciones. Para que Phoenix maneje cualquier programa, debe convertirse a esta representación. También se especifica la especificación para estos convertidores de tipos de archivos específicos, llamados lectores de archivos en la terminología de Phoenix. Phoenix viene incluido con lectores de archivos binarios ejecutables portátiles , CIL y la salida del front-end de Visual C++ . [9] Se pueden escribir lectores para otros idiomas usando Phoenix SDK, aunque se deben usar herramientas separadas como lex y yacc para escribir lexer y parser , respectivamente.
Una vez que el programa se ha convertido al IR, las herramientas de análisis y optimización pueden operar en esa forma. Phoenix incluye una selección de herramientas, que incluyen recuento de bloques, análisis de memoria, cobertura de código , análisis y optimización de código . [10] El SDK de Phoenix también se puede utilizar para escribir y conectar otras herramientas. La generación de código se maneja proporcionando escritores de archivos específicos de la arquitectura (ya sea una arquitectura física del procesador o una arquitectura de máquina virtual ) . Phoenix proporciona el backend del compilador, que comparte con Visual C++, para manejar el análisis, la optimización y la generación de código para la arquitectura x86 . Los escritores para otras arquitecturas deben proporcionarse por separado. c2.dll
Gracias a la arquitectura modular, cualquier componente puede sustituirse sin afectar al resto del sistema. Por ejemplo, para orientar el compilador a una arquitectura diferente, solo es necesario cambiar el escritor de archivos específico de la arquitectura, manteniendo el resto de la pila sin cambios. Para crear un compilador para un nuevo lenguaje, sólo es necesario proporcionar los lectores.
Se utiliza un componente Phoenix (phx.dll) para algunos de los análisis estáticos ( FxCop ) en Visual Studio 2010. [11] (El compilador Phoenix en sí, que es necesario para que funcione la mayor parte de la inserción de instrumentación, no está incluido con Visual Studio. )