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 un SDK , cuya versión preliminar 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 pueda manejar cualquier programa, es necesario convertirlo a esta representación. También se especifica la especificación de estos convertidores específicos de tipo de archivo, llamados lectores de archivos en la terminología de Phoenix. Phoenix viene incluido con lectores para archivos binarios Portable Executable , CIL y la salida del front-end de Visual C++ . [9] Se pueden escribir lectores para otros lenguajes utilizando el SDK de Phoenix, aunque se deben utilizar herramientas independientes como lex y yacc para escribir el analizador léxico y el analizador sintáctico , respectivamente.
Una vez que el programa se ha convertido al IR, las herramientas de análisis y optimización pueden operar en ese formato. Phoenix incluye una selección de herramientas, que incluyen conteo de bloques, análisis de memoria, cobertura de código , análisis de código y optimización . [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 la 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
Como resultado de la arquitectura modular, cualquier componente puede reemplazarse sin afectar al resto del sistema. Por ejemplo, para adaptar 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, solo 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ía de las inserciones de instrumentación, no está incluido en Visual Studio).