Heim  >  Artikel  >  Backend-Entwicklung  >  C#-Compiler

C#-Compiler

王林
王林Original
2024-09-03 15:03:031299Durchsuche

Ein C#-Complier kann als integrierte Komponente definiert werden, die zum Umwandeln des in C# programmierten Codes in einen maschinenlesbaren Sprachcode verwendet wird, der die Ausgabedateien in Form von DLL-Dateien oder EXE-Dateien zurückgibt. C# verfügt über zwei verschiedene Arten von Kompilierungsmethoden, nämlich Common Language Runtime-Kompilierung (CLR) und Just-in-Time-Kompilierung (JIT). Die JIT-Compiler werden weiter in Pre-JIT-Compiler, Normal-JIT-Compiler und Econo-JIT-Compiler unterteilt. Einige der häufig verwendeten Tools für diese Kompilierungszwecke sind C#-Compiler 2.0, C#-Compiler 3.5, C#-Compiler 4.x, Roslyn- und Mono-Compiler.

C#-Compiler

Nachdem die Zwischensprache generiert wurde, mussten wir diese IL in Maschinencodes konvertieren, da der Prozessor nur Maschinencodes verstand.  Deshalb haben wir für diese Konvertierung CLR (Common Language Runtime) verwendet. CLR ist ein Programm, das auf dem Computer ausgeführt wird und den IL-Code mithilfe von Just-In-Time (allgemein als JIT bezeichnet) in Maschinencodes umwandelt. Wenn wir auf die .exe-Datei doppelklicken, wird der JIT-Compiler aufgerufen und kompiliert den IL-Code zu diesem Zeitpunkt, weshalb er JUST-IN-TIME (JIT) heißt.

C#-Compiler

Die Kompilierung kann implizit oder explizit erfolgen. Bei der impliziten Kompilierung handelt es sich um eine zweifache Kompilierung, bei der zunächst IS kompiliert und anschließend in Maschinensprache kompiliert wird. Dieser Vorgang wird als JIT-Kompilierung oder JUST-In-Time-Kompilierung bezeichnet. JIT unterstützt mehrere Plattformen und beschleunigt die Ausführung des Codes.

Typen von Just-In-Time-Compilern

Es gibt drei verschiedene Just-In-Time-Compiler

1. Pre-JIT-Compiler

In diesem Compiler gibt es nur einen einzigen Kompilierungsvorgang, da der gesamte Quellcode in den nativen Code kompiliert wird.

2. Normaler JIT-Compiler

In diesem Compiler werden nur die Methoden in Maschinencode kompiliert, die zur Laufzeit benötigt werden. Der Compiler kompiliert diese Methoden, speichert sie im Cache und verwendet dieselbe Methode erneut.

3. Econo JIT-Compiler

In diesem Compiler werden nur die Methoden in Maschinencode kompiliert, die zur Laufzeit erforderlich sind. Diese Methoden werden jedoch entfernt, wenn sie nicht erforderlich sind. In JIT wird zur Laufzeit nur die erforderliche Methode kompiliert, daher ist weniger Speicherverbrauch erforderlich.

Im obigen Diagramm

1–3 Schritte werden zur Kompilierungszeit ausgeführt

3–5 Schritte werden zur Laufzeit ausgeführt.

Wenn wir also ausführen, treten diese beiden Arten von Fehlern auf.

Laufzeitfehler und Compilerfehler

  • Compilerfehler: Diese Art von Fehler tritt im C#-Compiler selbst auf. Es verhindert, dass der C#-Code in das .exe-Format kompiliert wird. Diese Fehler sind im Wesentlichen auf einen Syntaxfehler zurückzuführen. Wenn wir eine Syntax falsch geschrieben haben oder das Komma oder Semikolon übersehen haben, hat der Compiler dies nicht verstanden, sodass er die Verarbeitung stoppt und den Fehler bei der Kompilierung auslöst. Wir können diese Fehler im Ausgabefenster der IDE sehen. Durch die Untersuchung dieser Fehler können wir unseren Code korrigieren.
  • Laufzeitfehler: Dies sind Echtzeitfehler. Diese treten auf, wenn der Code erfolgreich kompiliert wurde, bei der Ausführung jedoch Probleme auftreten. Dies wirkt sich auf das Verhalten des Codes aus. Wir können beispielsweise sagen, dass ein Laufzeitfehler auftritt, wenn wir versuchen, eine beliebige Zahl durch Null zu dividieren. Diese Fehler sind langwieriger als Compilerfehler, da wir in diesem Fall das Verhalten des Codes korrigieren müssen.

C#-Compiler

Typ der C#-Compiler

Frühere Microsoft-Compiler wurden als .Net Framework bezeichnet, z. B. C#-Compiler 2.0, C#-Compiler 3.5, C#-Compiler 4.x usw. Diese Compiler wurden nicht in C# geschrieben, oder wir können sagen, dass C# nicht von C# kompiliert wurde. Die anderen Compiler, die danach entstanden sind, sind:

1. Roslyn

Früher wurde der Compiler in C/C++ geschrieben. Roslyn ist ein Open-Source-.Net-Compiler, in dem der C++-Code ersetzt wird. Es ruft die Arten von Elementen im Code und ihre Beziehung zueinander ab. Da C#- und VB-Teams den Compiler geschrieben haben, stehen für beide Visual Studio-Vorlagen zur Verfügung. Es ermöglicht uns, Code zu schreiben, der eine Quelldatei analysiert, und es ist für uns einfach, Quellcode zu ändern.

Im Folgenden sind die vier API-Ebenen von Roslyn aufgeführt

  • Skript-API: Diese Ebene stellt einen Laufzeitausführungskontext bereit und ermöglicht uns die Verwendung von C# als Skriptsprache und weist keine Abhängigkeiten von Visual Studio-Komponenten auf.
  • Compiler-API: Diese Ebene wird für die Syntax verwendet und enthält Referenzen für Assemblys und Quellcodedateien. Diese Ebene weist auch keine Abhängigkeiten von Visual Studio-Komponenten auf.
  • Service-API: Diese Ebene bietet IntelliSense, Formatierung, Alle Referenzen suchen usw. oben auf dem SDK. Es hilft auch bei der Verwaltung von Informationen über das Projekt und bei der Verwaltung von Projektabhängigkeiten.
  • Workspace API: Diese Ebene dient hauptsächlich der Analyse von Code und der Umgestaltung durch IDEs. Roslyn vereinfacht den Code und besteht aus einer Reihe von APIs wie Compiler und Dienst, die viele Funktionen wie Formatierung, Intellisense usw. bereitstellen. Es bietet Unterstützung für mehrere Sprachen. Workspace-APIs bieten umfassende Informationen zum Quellcode.

2. Mono-Compiler

Mono-C#-Compiler basierend auf ECMA-Standards für C#. Es gibt mehrere Versionen mit einem Framework wie C# 1.0, 2.0, 3.0, 4.0. Der Mono-Compiler mcs zielt auf Framework 1.1 ab, gmcs auf Framework 2.0, während smcs und dmcs auf Framework 2.1 bzw. 4.0 abzielen.

  • mcs: Es unterstützt alle C# 1.1-Funktionen wie anonyme Methoden, nullfähige Typen, feste Puffer, Zugriffsmodifikatoren für Eigenschaften, statische Klassen usw.
  • gmcs: Es unterstützt C# 2.0-Funktionen wie Abfrageausdrücke, Objektinitialisierer, Teilmethoden, Lambda-Ausdrücke, automatisch implementierte Eigenschaften usw.
  • dmcs: Es unterstützt C# 4.0-Funktionen, darunter benannte Argumente, generische Typvarianz, dynamische Bindung usw.

Der andere Compiler wie RemObjects C#-Compiler, der dem C#-Standard gemäß EMCA-Spezifikation folgt, und darüber hinaus gibt es GNU-C#-Compiler, die C# und .Net implementieren.

Fazit

Der C#-Compiler ist wie jeder andere Compiler, der Code in Maschinencode kompiliert, damit der Prozessor den Prozess verstehen kann.

Das obige ist der detaillierte Inhalt vonC#-Compiler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Namespaces in C#Nächster Artikel:Namespaces in C#