Compilador: Un compilador es un programa que convierte código fuente (lenguaje original) escrito en un lenguaje de programación en otro (idioma destino). La compilación es el proceso de traducir del código fuente (normalmente un lenguaje de alto nivel) a código objeto (normalmente un lenguaje de bajo nivel o lenguaje máquina) que puede ejecutarse directamente por un ordenador o una máquina virtual.
En la plataforma .NET, existen dos compiladores diferentes en distintas etapas de ejecución del modelo: uno llamado compilador Roslyn, que compila código en C# y VB en ensambladores; El otro se llama compilador RyuJIT, que compila el código IL (lenguaje intermedio) en ensamblador en código máquina.
Este artículo comienza con el compilador Roslyn. No tenemos que profundizar en cómo funciona, sino para entender cómo funciona, para saber para qué puede usarse.
Inicialmente, el compilador del lenguaje C# estaba escrito en C++, y más tarde Microsoft introdujo un nuevo compilador escrito en C#: Roslyn, que es un compilador bootstrap.
El compilador bootstrap significa que el compilador de un determinado lenguaje de programación está escrito en el propio lenguaje. Cada versión del compilador bootstrap se compila con una versión anterior, pero su primera versión debe ser compilada por un compilador escrito en otro lenguaje, como la primera versión de Roslyn compilada por un compilador escrito en C++. Muchos lenguajes de programación maduran y escriben sus propios compiladores usando el propio lenguaje, como C# y Go.
En la plataforma .NET, el compilador Roslyn es responsable de compilar código C# y VB en ensambladores.
La mayoría de los compiladores tradicionales existentes son patrones de "caja negra" que convierten el código fuente en ejecutables o archivos biblioteca, y no tenemos forma de saber qué ocurre entre medias. A diferencia de Roslyn, Roslyn te permite acceder a todas las etapas del proceso de compilación de código a través de APIs.
Su mecanismo de funcionamiento es basado en pipeline, con cuatro etapas, cada una de las cuales es un módulo independiente, y cada módulo proporciona una API correspondiente. Los entornos de desarrollo integrados (IDE) pueden aprovechar estas APIs para proporcionar herramientas convenientes que mejoren la eficiencia del desarrollo, como el resaltado de código, pistas inteligentes, herramientas de refactorización, herramientas de análisis de rendimiento y más. Además, con Roslyn, los desarrolladores pueden usar el compilador como un servicio en sus propios programas.
Aprovecha las APIs proporcionadas por Roslyn para generar dinámicamente ejemplos de código
Primero, crea una nueva biblioteca ClassLibraryGenerator y crea un proyecto de biblioteca estándar .NET que tenga como objetivo el nombre de framework objetivo netstandard2.0 (TFM). Sumando los paquetes de NuGet Microsoft.CodeAnalysis.Analyzers y Microsoft.CodeAnalysis.CSharp, CSPROJ se configura de la siguiente manera:
Crea un nuevo archivo C# llamado TestSourceGenerator.cs que especifique tu propio generador de fuentes de la siguiente manera:
Desde el objeto context, podemos acceder al punto de entrada compilado o al método Main. Una instancia mainMethod es un IMethodSymbol que representa el símbolo de un método o método similar (incluyendo constructores, destructores, operadores o accesorios de atributos/eventos). El método Microsoft.CodeAnalysis.Compilation.GetEntryPoint devuelve el IMethodSymbol del punto de entrada del programa. Otros métodos te permiten encontrar cualquier símbolo de método en tu proyecto. En este objeto, podemos deducir el espacio de nombres (si existe) y el tipo que contiene. La fuente en este ejemplo es una cadena interpolada que genera el código fuente a generar, con los huecos interpolados que pueblan el espacio de nombres y la información de tipo contenidos. Añadir la fuente al contexto con el nombre del prompt. Para este ejemplo, el constructor crea un nuevo archivo fuente de compilación que contiene la implementación del método parcial en la aplicación de consola. Se puede escribir un generador de fuentes para añadir cualquier fuente favorita.
Crea una nueva aplicación de consola ConsoleApp4 (sin instrucciones de nivel superior) con el siguiente código:
Al mismo tiempo, añade la referencia del proyecto ClassLibraryGenerator, de la siguiente manera:
Prueba a iniciar la app de consola con la salida de la siguiente manera:
En Visual Studio, haz clic en el proyecto "Dependencies" - > "Analyzer" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator", haz doble clic en el archivo "Program.g.cs" para ver el código generado, de la siguiente manera:
Pronto:Modificar el código del constructor puede requerir reiniciar Visual Studio para verlo。
Dirección de GitHub de Roslyn:El inicio de sesión del hipervínculo es visible.
Referencia:
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible. |