Roslyn — platforma kompilatora .NET

May 05 2023
Wprowadzenie Dla tych, którzy są związani z branżą technologiczną od jakiegoś czasu, termin „.NET” jest prawdopodobnie znajomy.

Wstęp

Dla tych, którzy są związani z branżą technologiczną od jakiegoś czasu, termin „.NET” jest prawdopodobnie znajomy. Mogą również wiedzieć, że został opracowany przez firmę Microsoft. Jednak zaskoczeniem może być fakt, że .NET stał się open source w 2016 roku. Ten artykuł skupia się na Roslyn , platformie kompilatora używanej w .NET.

Zanim zagłębisz się w Roslyn, ważne jest, aby najpierw zrozumieć, czym jest .NET.

Co to jest .NET?

.NET (znany również jako .NET core) to bezpłatna , wieloplatformowa platforma programistyczna typu open source opracowana przez firmę Microsoft do tworzenia wielu różnych typów aplikacji internetowych, mobilnych, komputerowych, gier, IoT i nie tylko . Jest to międzyplatformowy następca własnościowego .NET Framework , który działał głównie w systemie Windows .

.NET oferuje następujące 3 języki programowania.

C#

C# to uniwersalny język programowania wysokiego poziomu obsługujący wiele paradygmatów. C# obejmuje pisanie statyczne, silne pisanie, leksykalne, imperatywne, deklaratywne, funkcjonalne, ogólne, zorientowane obiektowo i komponentowo.

F#

F# to przede wszystkim funkcjonalny, wieloparadygmatowy język programowania ogólnego przeznaczenia, silnie typowany, który obejmuje funkcjonalne, imperatywne i obiektowe metody programowania.

Visual Basic

Visual Basic to wieloparadygmatowy, zorientowany obiektowo język programowania, który koncentruje się na przejrzystości, a nie na zwięzłości.

Czym jest Roslyn?

Roslyn to kryptonim projektu platformy kompilatora .NET, który wziął swoją nazwę od miasta o tej samej nazwie w Waszyngtonie w USA.

.NET Compiler Platform to zestaw kompilatorów typu open source i interfejsów API do analizy kodu dla języków C# i Visual Basic (VB.NET) .

Projekt zawiera wersje kompilatorów C# i VB.NET napisane w samych językach docelowych ( kompilatory self-hosted ). Kompilatory są dostępne za pośrednictwem programów wiersza poleceń, a także jako interfejsy API, których można używać natywnie z poziomu kodu platformy .NET.

Zdjęcie 1: Oficjalne logo Roslyn

Jak można napisać kompilator z samego języka docelowego?

Kiedy po raz pierwszy dowiedziałem się o językach programowania z kompilatorami napisanymi w samym języku, pojawiło się dla mnie pytanie: jak można stworzyć kompilator przy użyciu tego samego języka, który ma kompilować? Oto jak to się robi.

Początkowo kompilator jest napisany w istniejącym języku programowania, a gdy język jest wystarczająco dojrzały, rozwój kompilatora może przełączyć się na język, który kompiluje, umożliwiając kompilatorowi samodzielne zbudowanie. Te typy kompilatorów są określane jako kompilatory samoobsługowe.

Zagadka rozwiązana !!!

Co sprawia, że ​​Roslyn jest wyjątkowa?

Roslyn wyróżnia się wśród większości innych kompilatorów głównie z następujących powodów.

  • Roslyn to projekt typu open source : w przeciwieństwie do większości kompilatorów, które są zastrzeżone i mają zamknięte źródła, Roslyn jest oprogramowaniem typu open source. Oznacza to, że każdy może przeglądać kod źródłowy, modyfikować go i współtworzyć projekt. Dzięki temu jest bardziej przejrzysty i elastyczny, a programiści mogą na nim budować.
  • Roslyn to platforma , a nie tylko kompilator : Roslyn to coś więcej niż tylko kompilator. To kompletna platforma do budowania kompilatorów i narzędzi językowych. Zawiera zestaw interfejsów API, które umożliwiają programistom pracę z drzewem składni, modelem semantycznym i innymi elementami języka na poziomie szczegółowym. Umożliwia to tworzenie potężnych narzędzi językowych, takich jak analiza kodu, refaktoryzacja i generowanie kodu.
  • Roslyn zapewnia informacje zwrotne w czasie rzeczywistym : Roslyn została zaprojektowana tak, aby zapewniać informacje zwrotne w czasie rzeczywistym podczas pisania kodu. Podczas pisania parser Roslyn buduje drzewo składni z twojego kodu, a model semantyczny jest używany do analizy i zrozumienia kodu. Dzięki temu środowisko IDE zapewnia rozbudowane uzupełnianie kodu, sprawdzanie błędów i inne funkcje, które ułatwiają szybsze i dokładniejsze pisanie kodu.
  • Roslyn jest wieloplatformowy : Podczas gdy tradycyjne kompilatory są często powiązane z określonym systemem operacyjnym, Roslyn został zaprojektowany jako wieloplatformowy. Może być używany do tworzenia aplikacji dla systemów Windows, Linux i macOS, dzięki czemu jest bardziej elastyczny i można go dostosować.

Architektura Roslyn

Dzięki warstwie API Roslyn, która odzwierciedla tradycyjny potok kompilatora, możesz uzyskać dostęp do analizy kodu kompilatorów C# i Visual Basic jak nigdy dotąd. To jak przepustka za kulisy do wewnętrznego działania kompilatorów.

Proces kompilacji Roslyn można podzielić na kilka faz.

  1. Rozbiór gramatyczny zdania
  2. Deklaracja
  3. Wiążący
  4. Emisja IL
  5. Obraz 2: Fazy procesu kompilacji

Rozbiór gramatyczny zdania

Ta faza składa się z dwóch faz podrzędnych, które następują po analizie składniowej po tokenizacji.

  1. Tokenizacja — w kontekście kompilatora tokenizacja (znana również jako leksyfikacja, analiza leksykalna) to proces przekształcania kodu źródłowego w sekwencję ciągów znaków z przypisanymi znaczeniami (tokenami). Program wykonujący tokenizację nazywa się tokenizer lub lexer.
  2. Parsowanie — w fazie parsowania dane wyjściowe z fazy tokenizacji są wykorzystywane do zbudowania struktury danych zwanej abstrakcyjnym drzewem składni, która zapewnia strukturalną reprezentację danych wejściowych podczas sprawdzania poprawności składni.

W tej fazie metadane źródłowe i importowane są analizowane w celu utworzenia nazwanych symboli.

Wiążący

Ta faza dopasowuje identyfikatory w kodzie do symboli.

Emisja IL

W tej fazie emitowany jest kod w języku pośrednim ze wszystkimi informacjami.

Wykorzystując odpowiedni kompilator just-in-time (JIT), możliwe jest uruchomienie kodu IL na dowolnej architekturze komputera zgodnej z kompilatorem JIT.

Równolegle do każdej z tych faz kompilacji platforma kompilatora .NET udostępnia zestaw interfejsów API, które umożliwiają dostęp do informacji z każdej z tych faz.

  • Parser — interfejs API drzewa składni
  • Faza deklaracji — Symbole API
  • Binder — interfejsy API do wiązania i analizy przepływu
  • Emiter IL — API emisji
  • Obraz 3: Porównanie interfejsów API ujawnionych na każdym etapie kompilacji
Obraz 4: Porównanie usług językowych świadczonych za pośrednictwem interfejsów API w każdej fazie procesu kompilacji

Zestaw SDK kompilatora .NET składa się z kilku warstw interfejsów API.

Interfejsy API kompilatora

Te interfejsy API składają się z modeli obiektów, które odpowiadają informacjom ujawnianym w każdej fazie potoku kompilatora, w tym zarówno dane składniowe, jak i semantyczne.

Zawierają niezmienną migawkę pojedynczego wywołania kompilatora, w tym odwołania do zestawu, opcje kompilatora i pliki kodu źródłowego.

Niezmienny oznacza, że ​​kiedy zmieniamy obiekt, zwracana jest zmodyfikowana kopia.

Ta niezmienność pomaga zachować bezpieczeństwo wątków i zapewnia korzyści w zakresie wydajności.

Istnieją dwa różne interfejsy API, które reprezentują język C# i język Visual Basic.

Interfejsy API diagnostyki

W procesie kompilacji kompilator tworzy informacje diagnostyczne o kodzie, w tym błędy składniowe, ostrzeżenia i statystyki.

Warstwa interfejsu API kompilatora udostępnia powyższe informacje za pośrednictwem rozszerzalnego interfejsu API, który umożliwia podłączenie analizatorów zdefiniowanych przez użytkownika do procesu kompilacji.

Skryptowe interfejsy API

Warstwa kompilatora Roslyn obejmuje interfejsy API hostingu i skryptów, które umożliwiają użytkownikom wykonywanie fragmentów kodu i budowanie kontekstu wykonawczego.

Interaktywna pętla REPL (Read-Evaluate-Print Loop) języka C# wykorzystuje te interfejsy API, umożliwiając użytkownikom wykorzystanie języka C# jako języka skryptowego i interaktywne wykonywanie kodu podczas jego pisania.

Obraz 5: C# Interactive REPL dostarczony przez Visual Studio 2022

Interfejsy API obszaru roboczego

Te interfejsy API służą jako punkt wyjścia do przeprowadzania analizy kodu i refaktoryzacji całych rozwiązań.

Ponadto warstwa Workspaces Roslyn udostępnia szereg interfejsów API wykorzystywanych podczas budowania narzędzi do analizy kodu i refaktoryzacji, które działają w środowisku hosta, takim jak Visual Studio IDE.

Niektóre zastosowania tych interfejsów API to interfejsy API formatowania, wyszukiwania wszystkich odwołań i generowania kodu.

Streszczenie

Biorąc pod uwagę wiedzę, którą zdobyliśmy do tej pory, oczywiste jest, że Roslyn zaznaczyła znaczący punkt zwrotny w ewolucji kompilatorów.

Służył jako źródło wiedzy i inspiracji dla nadchodzących języków programowania i kompilatorów.

Moim zdaniem decyzja Microsoftu o uczynieniu z niej technologii typu open source była przełomowa, ponieważ umożliwia globalnej społeczności współpracę i zwiększanie jej możliwości, torując w ten sposób drogę do lepszej przyszłości.

Jak się przyczynić

Oprogramowanie typu open source dominuje dzięki wkładowi hojnych, entuzjastycznych osób ze społeczności. Rozwój Roslyn odbywa się za pośrednictwem GitHub. Jeśli chcesz wnieść swój wkład, oto link do wytycznych dotyczących wkładu podanych w ich repozytorium GitHub.

https://github.com/dotnet/roslyn/blob/main/docs/contributing/Building%2C%20Debugging%2C%20and%20Testing%20on%20Windows.md

Bibliografia

Przewodnik po języku C# na platformie edukacyjnej firmy Microsoft

https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/

artykuły w Wikipedii

https://en.wikipedia.org/wiki/Roslyn_(compiler)— na Roslyn

https://en.wikipedia.org/wiki/Lexical_analysis— o analizie leksykalnej

https://en.wikipedia.org/wiki/Parsing#Parser— na parsowaniu

https://en.wikipedia.org/wiki/Self-hosting_(compilers)— na własnym hostingu

Gościnny wykład Matthew Robinsa na Uniwersytecie Xamarin

https://youtu.be/Gv7vuA-7UVA

Repozytorium GitHub Roslyn

https://github.com/dotnet/roslyn

Film autorstwa Velocity Code

https://youtu.be/8KdW_VfqLIg

Artykuł w Techopedii na temat języków pośrednich

https://www.techopedia.com/definition/24290/intermediate-language-il-net

Artykuł Richarda Campbella „When open source przyszedł do firmy Microsoft”.

https://www.codemag.com/Article/2009041/When-Open-Source-Came-to-Microsoft#:~:text=NET%20Framework%20open%2Dsource%3B%20the,%2C%20build%2C%20and%20test%20systems.