Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 2796|Odpowiedź: 2

[Źródło] .NET/C# Platforma kompilatora Roslyn

[Skopiuj link]
Opublikowano 10.03.2024 10:58:32 | | | |
Kompilator: Kompilator to program, który konwertuje kod źródłowy (oryginalny język) napisany w jednym języku programowania na inny (język docelowy). Kompilacja to proces tłumaczenia z kodu źródłowego (zwykle języka wysokiego poziomu) na kod obiektowy (zwykle język niskopoziomowy lub maszynowy), który może być wykonywany bezpośrednio przez komputer lub maszynę wirtualną.

W platformie .NET istnieją dwa różne kompilatory na różnych etapach wykonywania modelu: jeden zwany kompilatorem Roslyn, który kompiluje kod C# i VB do asembli; Druga to kompilator RyuJIT, który kompiluje kod IL (język pośredni) w asemblerze do kodu maszynowego.

Ten artykuł zaczyna się od kompilatora Roslyn. Nie musimy zagłębiać się w to, jak działa, ale by zrozumieć, jak działa, by wiedzieć, do czego można go wykorzystać.

Początkowo kompilator języka C# był napisany w C++, a później Microsoft wprowadził nowy kompilator napisany w samym C#: Roslyn, który jest kompilatorem bootstrap.

Kompilator bootstrap oznacza, że kompilator danego języka programowania jest napisany w samym języku. Każda wersja kompilatora bootstrap jest kompilowana z wersją poprzedzającą ją, ale jej pierwsza wersja musi być skompilowana przez kompilator napisany w innym języku, na przykład pierwsza wersja Roslyn skompilowana przez kompilator napisany w C++. Wiele języków programowania dojrzewa i tworzy własne kompilatory wykorzystujące sam język, takie jak C# i Go.

Na platformie .NET kompilator Roslyn odpowiada za kompilację kodu C# i VB do asembli.

Większość istniejących tradycyjnych kompilatorów to wzorce typu "skrzynka", które konwertują kod źródłowy na pliki wykonywalne lub pliki biblioteczne, a my nie mamy pojęcia, co dzieje się pomiędzy. W przeciwieństwie do Roslyn, Roslyn umożliwia dostęp do każdego etapu procesu kompilacji kodu za pośrednictwem API.

Jego mechanizm działania opiera się na potokach, z czterema etapami, z których każdy stanowi niezależny moduł, a każdy moduł zapewnia odpowiadające mu API. Zintegrowane środowiska programistyczne (IDE) mogą wykorzystywać te API, aby zapewnić wygodne narzędzia zwiększające efektywność rozwoju, takie jak podświetlanie kodu, inteligentne wskazówki, narzędzia do refaktoryzacji, narzędzia do analizy wydajności i inne. Dodatkowo, w Roslyn deweloperzy mogą używać kompilatora jako usługi w swoich własnych programach.

Wykorzystaj API udostępnione przez Roslyn do dynamicznego generowania próbek kodu

Najpierw stwórz nową bibliotekę ClassLibraryGenerator i stworzyć projekt biblioteki standardowej .NET, który będzie celował w framework netstandard2.0 (TFM). Dodaj pakiety NuGet Microsoft.CodeAnalysis.Analyzers oraz Microsoft.CodeAnalysis.CSharp, a csproj jest skonfigurowany następująco:


Stwórz nowy plik C# o nazwie TestSourceGenerator.cs, który określa Twój własny generator źródeł w następujący sposób:

Z obiektu kontekstowego możemy uzyskać dostęp do skompilowanego punktu wejścia lub do metody Main. Instancja mainMethod to IMethodSymbol reprezentujący symbol metody lub podobnej metody (w tym konstruktorów, destruktorów, operatorów lub atrybutów/eventowych accessorów). Metoda Microsoft.CodeAnalysis.Compilation.GetEntryPoint zwraca IMethodSymbol punktu wejścia programu. Inne metody pozwalają znaleźć dowolny symbol metody w projekcie. W tym obiekcie możemy wywnioskować przestrzeń nazw (jeśli istnieje) oraz typ, który zawiera. Źródłem w tym przykładzie jest interpolowany ciąg tekstu, który szablonuje kod źródłowy do wygenerowania, a interpolowane luki wypełniają zawartą przestrzeń nazw i informacje o typie. Dodaj źródło do kontekstu wraz z nazwą promptu. W tym przykładzie twórca tworzy nowy plik źródłowy budowy, który zawiera implementację częściowej metody w aplikacji konsolowej. Generator źródeł może być napisany, aby dodać dowolne ulubione źródło.

Stwórz nową aplikację konsolową ConsoleApp4 (bez instrukcji najwyższego poziomu) z następującym kodem:

Jednocześnie dodaj odniesienie do projektu ClassLibraryGenerator, w następujący sposób:

Spróbuj uruchomić aplikację konsolową z następującym wynikiem:



W Visual Studio kliknij na projekt "Dependencies" – > "Analyzer" – > "ClassLibraryGenerator" – > "ClassLibraryGenerator.TestSourceGenerator", kliknij dwukrotnie na plik "Program.g.cs", aby zobaczyć wygenerowany kod, w następujący sposób:



Monit:Modyfikacja kodu budującego może wymagać ponownego uruchomienia Visual Studio, aby go zobaczyć

Adres GitHub Roslyn:Logowanie do linku jest widoczne.

Odniesienie:

Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.




Poprzedni:Wykonywanie kodu w Visual Studio z wykorzystaniem okna interaktywnego C#
Następny:Pobranie oryginalnego pliku obrazu ISO z Windows 11
 Ziemianin| Opublikowano 10.03.2024 10:59:12 |
Wprowadzenie i różnice między kompilacją JIT i AOT w .NET
https://www.itsvse.com/thread-10734-1-1.html
 Ziemianin| Opublikowano 06.07.2024 16:59:59 |
Użyj Roslyn do dynamicznej kompilacji kodu C# i jego uruchomienia
https://www.itsvse.com/thread-10786-1-1.html
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com