Roslyn – Die .NET Compiler-Plattform
Einführung
Denjenigen, die schon seit einiger Zeit in der Technologiebranche tätig sind, ist der Begriff „.NET“ wahrscheinlich vertraut. Sie wissen vielleicht auch, dass es von Microsoft entwickelt wurde. Was jedoch überraschen mag, ist, dass .NET im Jahr 2016 Open Source wurde. Der Schwerpunkt dieses Artikels liegt auf Roslyn , der Compiler-Plattform, die in .NET verwendet wird.
Bevor Sie tief in Roslyn eintauchen, ist es wichtig, zunächst zu verstehen, was .NET ist.
Was ist .NET?
.NET (auch bekannt als .NET Core) ist eine kostenlose , plattformübergreifende Open-Source - Entwicklerplattform, die von Microsoft entwickelt wurde , um viele verschiedene Arten von Anwendungen für Web, Mobil, Desktop, Spiele, IoT und mehr zu erstellen . Es ist der plattformübergreifende Nachfolger des proprietären .NET Framework , das hauptsächlich unter Windows lief .
.NET bietet die folgenden 3 Programmiersprachen.
C#
C# ist eine allgemeine Programmiersprache auf hoher Ebene, die mehrere Paradigmen unterstützt. C# umfasst statische Typisierung, starke Typisierung, lexikalische, imperative, deklarative, funktionale, generische, objektorientierte und komponentenorientierte Programmierdisziplinen.
F#
F# ist eine funktionale, universelle, stark typisierte Programmiersprache mit mehreren Paradigmen, die funktionale, imperative und objektorientierte Programmiermethoden umfasst.
VisualBasic
Visual Basic ist eine paradigmenübergreifende, objektorientierte Programmiersprache, die sich auf Klarheit statt Kürze konzentriert.
Was ist Roslyn?
Roslyn ist der Codename für das .NET-Compiler-Plattform-Projekt, das seinen Namen von einer gleichnamigen Stadt in Washington, USA, erhielt.
Die .NET-Compilerplattform ist eine Reihe von Open-Source-Compilern und Codeanalyse-APIs für die Sprachen C# und Visual Basic (VB.NET) .
Das Projekt enthält Versionen der C#- und VB.NET-Compiler, die in den Zielsprachen selbst geschrieben sind ( selbst gehostete Compiler ). Die Compiler sind über Befehlszeilenprogramme und auch als APIs verfügbar, die nativ innerhalb von .NET-Code verwendet werden können.
Wie kann ein Compiler aus der Zielsprache selbst geschrieben werden?
Als ich zum ersten Mal von Programmiersprachen mit Compilern erfuhr, die in der Sprache selbst geschrieben waren, stellte sich für mich eine Frage: Wie ist es möglich, einen Compiler mit derselben Sprache zu erstellen, die er kompilieren soll? So wird's gemacht.
Anfänglich ist der Compiler in einer bestehenden Programmiersprache geschrieben, und sobald die Sprache ausgereift genug ist, kann die Entwicklung des Compilers auf die Sprache umschalten, die er kompiliert, wodurch der Compiler in die Lage versetzt wird, sich selbst zu erstellen. Diese Arten von Compilern werden als selbsthostende Compiler bezeichnet.
Geheimnis gelüftet !!!
Was macht Roslyn so besonders?
Roslyn steht vor allem aus den folgenden Gründen unter den meisten anderen Compilern.
- Roslyn ist ein Open-Source-Projekt : Im Gegensatz zu den meisten Compilern, die proprietär und Closed-Source sind, ist Roslyn Open-Source-Software. Das bedeutet, dass jeder den Quellcode einsehen, ändern und zum Projekt beitragen kann. Dies macht es transparenter und flexibler und ermöglicht es Entwicklern, darauf aufzubauen.
- Roslyn ist eine Plattform , nicht nur ein Compiler : Roslyn ist mehr als nur ein Compiler. Es ist eine vollständige Plattform zum Erstellen von Compilern und Sprachwerkzeugen. Es enthält eine Reihe von APIs, die es Entwicklern ermöglichen, mit dem Syntaxbaum, dem semantischen Modell und anderen Sprachelementen auf granularer Ebene zu arbeiten. Dadurch ist es möglich, leistungsstarke Sprachwerkzeuge wie Codeanalyse, Refactoring und Codegenerierung zu erstellen.
- Roslyn bietet Echtzeit-Feedback : Roslyn wurde entwickelt, um Echtzeit-Feedback zu liefern, während Sie Code schreiben. Während Sie tippen, erstellt der Parser von Roslyn einen Syntaxbaum aus Ihrem Code, und das semantische Modell wird verwendet, um den Code zu analysieren und zu verstehen. Dadurch kann die IDE umfassende Codevervollständigung, Fehlerprüfung und andere Funktionen bereitstellen, die Ihnen helfen, Code schneller und genauer zu schreiben.
- Roslyn ist plattformübergreifend : Während traditionelle Compiler oft an ein bestimmtes Betriebssystem gebunden sind, ist Roslyn plattformübergreifend konzipiert. Es kann zum Erstellen von Anwendungen für Windows, Linux und macOS verwendet werden, wodurch es flexibler und anpassungsfähiger wird.
Architektur von Roslyn
Mit der API-Schicht von Roslyn, die eine herkömmliche Compiler-Pipeline widerspiegelt, können Sie wie nie zuvor auf die Codeanalyse der C#- und Visual Basic-Compiler zugreifen. Es ist wie ein Backstage-Pass zum Innenleben der Compiler.
Der Kompilierungsprozess von Roslyn kann in einige Phasen unterteilt werden.
- Parsing
- Erklärung
- Bindung
- IL-Emission
Parsing
Diese Phase besteht aus zwei Unterphasen, die auf das Parsing nach der Tokenisierung folgen.
- Tokenisierung – Im Kontext eines Compilers ist die Tokenisierung (auch bekannt als Lexing, lexikalische Analyse) der Prozess der Umwandlung des Quellcodes in eine Folge von Zeichenfolgen mit zugewiesenen Bedeutungen (Token). Das Programm, das die Tokenisierung durchführt, heißt Tokenizer oder Lexer.
- Parsing – In der Parsing-Phase wird die Ausgabe aus der Tokenisierungsphase verwendet, um eine Datenstruktur namens abstrakter Syntaxbaum zu erstellen, die eine strukturelle Darstellung der Eingabe liefert, während die korrekte Syntax überprüft wird.
In dieser Phase werden Quell- und importierte Metadaten analysiert, um benannte Symbole zu bilden.
Bindung
Diese Phase gleicht Identifikatoren im Code mit Symbolen ab.
IL-Emission
In dieser Phase wird Code in Intermediate Language mit allen Informationen ausgegeben.
Durch Verwendung eines geeigneten Just-in-Time-(JIT-)Compilers ist es möglich, IL-Code auf jeder Computerarchitektur auszuführen, die mit dem JIT-Compiler kompatibel ist.
Parallel zu jeder dieser Kompilierungsphasen stellt die .NET-Compilerplattform eine Reihe von APIs bereit, die den Zugriff auf die Informationen aus jeder dieser Phasen ermöglichen.
- Parser – Syntaxbaum-API
- Deklarationsphase – Symbols API
- Binder – Bindungs- und Flussanalyse-APIs
- IL-Emitter – Sende API
Das .NET-Compiler-SDK besteht aus mehreren Schichten von APIs.
Compiler-APIs
Diese APIs bestehen aus Objektmodellen, die den Informationen entsprechen, die in jeder Phase der Compiler-Pipeline offengelegt werden, einschließlich syntaktischer und semantischer Daten.
Sie enthalten eine unveränderliche Momentaufnahme eines einzelnen Aufrufs eines Compilers, einschließlich Assemblyverweisen, Compileroptionen und Quellcodedateien.
Unveränderlich bedeutet, dass, wenn wir das Objekt ändern, eine modifizierte Kopie zurückgegeben wird.
Diese Unveränderlichkeit trägt zur Aufrechterhaltung der Thread-Sicherheit bei und bietet Leistungsvorteile.
Es gibt zwei unterschiedliche APIs, die die C#-Sprache und die Visual Basic-Sprache darstellen.
Diagnose-APIs
Während der Kompilierung erstellt der Compiler Diagnoseinformationen über den Code, einschließlich Syntaxfehler, Warnungen und Statistiken.
Die Compiler-API-Schicht stellt die obigen Informationen über eine erweiterbare API bereit, die es ermöglicht, benutzerdefinierte Analysatoren in den Kompilierungsprozess einzufügen.
Skript-API s
Die Compiler-Schicht von Roslyn umfasst die Hosting- und Scripting-APIs, die es Benutzern ermöglichen, Code-Snippets auszuführen und einen Ausführungskontext zur Laufzeit aufzubauen.
Die interaktive C#-REPL (Read-Evaluate-Print-Schleife) nutzt diese APIs, sodass Benutzer C# als Skriptsprache nutzen und Code interaktiv ausführen können, während sie ihn schreiben.
Workspace-APIs
Diese APIs dienen als Ausgangspunkt für die Durchführung von Codeanalysen und das Refactoring ganzer Lösungen.
Darüber hinaus stellt die Workspaces-Schicht von Roslyn eine Reihe von APIs bereit, die beim Erstellen von Codeanalyse- und Refactoring-Tools verwendet werden, die in einer Hostumgebung wie der Visual Studio-IDE arbeiten.
Einige Verwendungen dieser APIs sind die Formatierungs-, Alle Verweise suchen- und Codegenerierungs-APIs.
Zusammenfassung
Angesichts der Erkenntnisse, die wir bisher gesammelt haben, ist es offensichtlich, dass Roslyn einen bedeutenden Wendepunkt in der Entwicklung von Compilern markiert hat.
Es diente als Wissens- und Inspirationsquelle für kommende Programmiersprachen und Compiler.
Meiner Meinung nach war die Entscheidung von Microsoft, sie zu einer Open-Source-Technologie zu machen, von großer Bedeutung, da sie es der globalen Gemeinschaft ermöglicht, zusammenzuarbeiten und ihre Fähigkeiten zu verbessern, wodurch der Weg für eine bessere Zukunft geebnet wird.
Wie kann ich beitragen?
Open-Source-Software setzt sich aufgrund der Beiträge von großzügigen, begeisterten Einzelpersonen aus der Community durch. Die Entwicklung von Roslyn erfolgt über GitHub. Wenn Sie einen Beitrag leisten möchten, finden Sie hier einen Link zu den Beitragsrichtlinien in ihrem GitHub-Repository.
https://github.com/dotnet/roslyn/blob/main/docs/contributing/Building%2C%20Debugging%2C%20and%20Testing%20on%20Windows.md
Verweise
Der C#-Leitfaden auf der Microsoft Learn-Plattform
https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/
Wikipedia-Artikel
https://en.wikipedia.org/wiki/Roslyn_(compiler)– auf Roslyn
https://en.wikipedia.org/wiki/Lexical_analysis— zur lexikalischen Analyse
https://en.wikipedia.org/wiki/Parsing#Parser— beim Parsen
https://en.wikipedia.org/wiki/Self-hosting_(compilers)— auf Selbsthosting
Gastvortrag der Xamarin University von Matthew Robins
https://youtu.be/Gv7vuA-7UVA
GitHub-Repository von Roslyn
https://github.com/dotnet/roslyn
Video nach Geschwindigkeitscode
https://youtu.be/8KdW_VfqLIg
Techopedia-Artikel über Zwischensprachen
https://www.techopedia.com/definition/24290/intermediate-language-il-net
Artikel „Als Open Source zu Microsoft kam“ von Richard Campbell
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.

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































