Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 2796|Resposta: 2

[Fonte] .NET/C# Plataforma compiladora Roslyn

[Copiar link]
Publicado em 10/03/2024 10:58:32 | | | |
Compilador: Um compilador é um programa que converte código-fonte (linguagem original) escrito em uma linguagem de programação para outra (língua de destino). Compilação é o processo de tradução do código-fonte (geralmente uma linguagem de alto nível) para o código objeto (geralmente uma linguagem de baixo nível ou linguagem de máquina) que pode ser executado diretamente por um computador ou máquina virtual.

Na plataforma .NET, existem dois compiladores diferentes em diferentes estágios de execução do modelo: um chamado compilador Roslyn, que compila códigos C# e VB em assemblies; O outro é chamado de compilador RyuJIT, que compila o código IL (linguagem intermediária) no assembly em código de máquina.

Este artigo começa com o compilador Roslyn. Não precisamos nos aprofundar em como funciona, mas sim entender como funciona, saber para que pode ser usado.

Inicialmente, o compilador da linguagem C# era escrito em C++, e depois a Microsoft introduziu um novo compilador escrito em C#: Roslyn, que é um compilador bootstrap.

O compilador bootstrap significa que o compilador de uma determinada linguagem de programação é escrito na própria linguagem. Cada versão do compilador bootstrap é compilada com uma versão que o precedeu, mas sua primeira versão deve ser compilada por um compilador escrito em outra linguagem, como a primeira versão do Roslyn compilada por um compilador escrito em C++. Muitas linguagens de programação amadurecem e escrevem seus próprios compiladores usando a própria linguagem, como C# e Go.

Na plataforma .NET, o compilador Roslyn é responsável por compilar códigos C# e VB em assemblies.

A maioria dos compiladores tradicionais existentes são padrões "caixa-preta" que convertem código-fonte em executáveis ou arquivos de biblioteca, e não temos como saber o que acontece entre esses processos. Ao contrário do Roslyn, o Roslyn permite que você acesse todas as etapas do processo de compilação de código por meio de APIs.

Seu mecanismo de funcionamento é baseado em pipeline, com quatro estágios, cada um dos quais é um módulo independente, e cada módulo fornece uma API correspondente. Ambientes de desenvolvimento integrados (IDEs) podem aproveitar essas APIs para fornecer ferramentas convenientes para melhorar a eficiência do desenvolvimento, como destaque de código, dicas inteligentes, ferramentas de refatoração, ferramentas de análise de desempenho e mais. Além disso, com o Roslyn, os desenvolvedores podem usar o compilador como um serviço em seus próprios programas.

Aproveite as APIs fornecidas por Roslyn para gerar amostras de código dinamicamente

Primeiro, crie uma nova biblioteca ClassLibraryGenerator e crie um projeto de biblioteca padrão .NET que tenha como alvo o nome de framework de alvo netstandard2.0 (TFM). Adicione os pacotes NuGet Microsoft.CodeAnalysis.Analyzers e Microsoft.CodeAnalysis.CSharp, o CSPROJ é configurado da seguinte forma:


Crie um novo arquivo C# chamado TestSourceGenerator.cs que especifica seu próprio gerador de fonte da seguinte forma:

A partir do objeto context, podemos acessar o ponto de entrada compilado ou o método Main. Uma instância mainMethod é um IMethodSymbol que representa o símbolo de um método ou método similar (incluindo construtores, destrutores, operadores ou acessores de atributos/eventos). O método Microsoft.CodeAnalysis.Compilation.GetEntryPoint retorna o IMethodSymbol do ponto de entrada do programa. Outros métodos permitem que você encontre qualquer símbolo de método no seu projeto. Neste objeto, podemos deduzir o namespace (se ele existir) e o tipo que ele contém. A fonte neste exemplo é uma cadeia interpolada que molda o código-fonte a ser gerado, com as lacunas interpoladas preenchendo o namespace contido e as informações de tipo. Adicione a fonte ao contexto com o nome do prompt. Para este exemplo, o construtor cria um novo arquivo fonte de compilação que contém a implementação do método parcial no aplicativo de console. Um gerador de fonte pode ser escrito para adicionar qualquer fonte favorita.

Crie um novo aplicativo de console ConsoleApp4 (sem instruções de nível superior) com o seguinte código:

Ao mesmo tempo, adicione a referência do projeto ClassLibraryGenerator, da seguinte forma:

Tente abrir o aplicativo de console com a saída da seguinte forma:



No Visual Studio, clique no projeto "Dependencies" - > "Analyzer" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator", clique duas vezes no arquivo "Program.g.cs" para ver o código gerado, da seguinte forma:



Rápido:Modificar o código do construtor pode exigir uma reinicialização do Visual Studio para visualizá-lo

Endereço do GitHub de Roslyn:O login do hiperlink está visível.

Referência:

O login do hiperlink está visível.
O login do hiperlink está visível.
O login do hiperlink está visível.




Anterior:Execução de código no Visual Studio usando a janela interativa de C#
Próximo:Download do arquivo de imagem ISO original do Windows 11
 Senhorio| Publicado em 10/03/2024 10:59:12 |
Introdução e diferença entre compilação JIT e AOT em .NET
https://www.itsvse.com/thread-10734-1-1.html
 Senhorio| Publicado em 06/07/2024 16:59:59 |
Use o Roslyn para compilar código C# dinamicamente e executá-lo
https://www.itsvse.com/thread-10786-1-1.html
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com