Este escrito ha sido aprobado por nuestros expertos así aseguramos la veracidad de nuestro tutorial.
Descargo de responsabilidad: Trabajo para Microsoft en el equipo de Roslyn.
CodeDom es un precursor de Roslyn, pero solo está relacionado marginalmente. Esencialmente, CodeDom es una forma simple y (algo) independiente del idioma de generar código que se agregó en .NET 1.0 para ayudar a los diseñadores (a la WinForms). Debido a que CodeDom fue un intento de proporcionar un modelo unificado que puede generar código en C #, VB y otros lenguajes, carece de alta fidelidad con cualquiera de los lenguajes que admite (es por eso que no puede crear una declaración de cambio con CodeDom). CSharpCodeProvider.CompileAssemblyFromSource es simplemente un envoltorio alrededor de la ejecución de csc.exe.
Roslyn es un animal completamente diferente. Es una reescritura de los compiladores de C # y VB desde cero utilizando código administrado: C # en C # y VB en VB (las versiones de csc.exe y vbc.exe que se envían hoy están escritas en código nativo). La ventaja de compilarlos en código administrado es que los usuarios pueden hacer referencia a los compiladores reales como bibliotecas de aplicaciones .NET (no se necesitan envoltorios).
Mientras compilamos cada componente de la canalización del compilador, hemos expuesto las API públicas en la parte superior:
- Analizador -> API de árbol de sintaxis
- Tabla de símbolos / Importación de metadatos -> API de símbolos
- Carpeta -> API de análisis de flujo y enlace
- Emisor de IL -> API de emisión
Roslyn se puede utilizar como un sofisticado generador de código fuente de C # y VB, pero ahí es donde termina la similitud con CodeDom. Las API del compilador de Roslyn se pueden utilizar para analizar código, realizar análisis semántico, compilar y evaluar código de forma dinámica, etc.
Además de los compiladores, el equipo de Roslyn también está reconstruyendo las características de Visual Studio C # y VB IDE en la parte superior de las API públicas del compilador. Por lo tanto, las API del compilador son lo suficientemente ricas para construir las herramientas de tiempo de diseño de Visual Studio, como IntelliSense y la refactorización del método de extracción. Además, en capas por encima del compilador, Roslyn ofrece servicios para análisis de nivel superior o transformación de datos. Por ejemplo, existen servicios para formatear código usando las reglas de formato de C # y VB, o para encontrar todas las referencias a un símbolo en particular dentro de una solución.
Realmente, no hay solo una beneficio especial de Roslyn sobre CodeDom. Donde CodeDom cubrió una necesidad de generación de código muy específica, Roslyn está abordando todo el espacio de herramientas de lenguaje al proporcionar un marco que le permite construir casi cualquier tipo de herramienta de lenguaje C # o VB que pueda imaginar.
CodeDom le permite compilar, pero no le da la capacidad de obtener realmente información sobre el código en sí (aparte de los errores del compilador). Básicamente, es una caja negra donde dices “compila esto” y dice “Lo logré” o “Fallé, aquí hay algunos errores”.
Roslyn le permite inspeccionar completamente y construir el código sobre la marcha. Esto incluye cosas como poder ver / inspeccionar los comentarios dentro de un fragmento de código fuente, información detallada sobre la estructura completa, etc. Puede revisar y obtener el árbol de sintaxis completo de la fuente que pasa a Roslyn y hacer un análisis detallado o transformaciones en él.
Dada la información de sintaxis completa y rica, tiene una gran cantidad de control y flexibilidad adicionales. Así es como, por ejemplo, funciona el ejemplo que copia un bloque de código C # y lo pega como código VB.NET. Con Roslyn, puede hacer más que simplemente compilar, también puede manipular el código en sí de forma limpia. Esto debería hacer que muchas herramientas sean mucho más simples de generar, ya que cosas como la refactorización se pueden hacer de manera muy simple ya que las herramientas comprenden la sintaxis completa, incluida la metainformación (como comentarios), y pueden trabajar con ella directamente.
Veo una gran diferencia: con CodeDom, cada vez que compila algo de C # o VB.NET, se sale del proceso. CSC.exe o VBC.exe son los verdaderos trabajadores detrás de la escena.
Si quieres construir un servicio, en términos de arquitectura, escalabilidad, aislamiento, etc. (mencionas Azure), esto no es muy bueno.
Con Roslyn está en proceso.
Supongo que esta es una de las razones por las que lo llaman “Compilador como servicio”.
Además, CodeDom es una API relativamente pobre, carece de muchas funciones y no está realmente actualizada, ya que fue diseñada principalmente para admitir la generación automática de código de los diseñadores de UI de Visual Studio. Creo que a Roslyn le irá mucho mejor, ya que está escrito por los chicos que escriben los compiladores. Espero que eso marque la diferencia.
PD: Una diferencia notable de CSC.exe y VBC.exe: Roslyn parece ser .NET puro (y usa CCI).
Reseñas y valoraciones
Si sostienes algún recelo o capacidad de modernizar nuestro crónica te sugerimos escribir una aclaración y con mucho gusto lo leeremos.