C# 編譯器

王林
王林原創
2024-09-03 15:03:031341瀏覽

C#編譯器可以定義為一個內建元件,用於將C#程式碼轉換為機器可讀的語言程式碼,並以.dll檔案或.exe檔的形式傳回輸出檔。 C#有兩種不同類型的編譯方法,即公共語言執行時期編譯(CLR)和即時編譯(JIT)。 JIT編譯器進一步分為Pre JIT編譯器、Normal JIT編譯器和Econo JIT編譯器。用於此編譯目的的一些常用工具包括 C# 編譯器 2.0、C# 編譯器 3.5、C# 編譯器 4.x、Roslyn 和 Mono 編譯器。

C# 編譯器

因此,在產生中間語言之後,我們需要將此 IL 轉換為機器碼,因為處理器只能理解機器碼。  所以我們使用CLR(公共語言執行時期)來進行此轉換。 CLR是一種在電腦上執行的程序,借助Just-In-Time(通常稱為JIT)將IL代碼轉換為機器碼。當我們雙擊 .exe 檔案時,會呼叫 JIT 編譯器並在該時間編譯 IL 程式碼,因此它被命名為 JUST-IN-TIME(JIT)。

C# 編譯器

編譯可以隱式或明確完成。隱式編譯是兩次編譯,先編譯IS,再編譯成機器語言。這個過程稱為 JIT 編譯或 JUST-In-Time 編譯。 JIT支援多平台,加快程式碼的執行速度。

即時編譯器的型別

有三種不同的即時編譯器

1。預 JIT 編譯器

在這個編譯器中,只有一個編譯過程,因為整個原始碼被編譯為本機程式碼。

2。普通 JIT 編譯器

在這個編譯器中,只有那些方法被編譯成機器碼,這是運行時需要的。編譯器編譯這些方法,將它們儲存在快取中,並再次使用相同的方法。

3。 Econo JIT 編譯器

在此編譯器中,只有那些方法被編譯為運行時所需的機器碼,但是如果不需要,這些方法將被刪除。在 JIT 中,運行時只編譯所需的方法,因此需要較少的記憶體使用。

上圖

編譯時會執行1-3步驟

運行時將執行 3-5 個步驟。

所以,當我們運行時會出現這兩類錯誤。

運行時錯誤和編譯器錯誤

  • 編譯器錯誤:此類錯誤發生在 C# 編譯器本身。它阻止 C# 程式碼編譯為 .exe 格式。這些錯誤基本上是由於語法錯誤而發生的,當我們拼寫錯誤任何語法或錯過逗號或分號時,編譯器無法理解這一點,因此它會停止處理並拋出編譯時錯誤。我們可以在IDE的輸出視窗中看到這些錯誤。因此,透過檢查這些錯誤,我們可以修正我們的程式碼。
  • 運行時錯誤: 這些是即時錯誤。當程式碼編譯成功但在執行時遇到任何問題時,就會發生這些情況。這會影響程式碼的行為。例如,我們可以說,當我們嘗試將任何數字除以零時,就會發生運行時錯誤。這些錯誤比編譯器錯誤更繁瑣,因為在這種情況下,我們需要修正程式碼的行為。

C# 編譯器

C# 編譯器類型

早期的微軟編譯器被命名為.Net Framework,如C#編譯器2.0、C#編譯器3.5、C#編譯器4.x等。這些編譯器不是用C#寫的,或者我們可以說C#不是由C#編譯的。此後出現的其他編譯器是:

1.羅斯林

早期編譯器是用 C/C++ 寫的。 Roslyn 是一個開源 .Net 編譯器,其中 C++ 程式碼被取代。它會取得程式碼中元素的類型以及它們之間的關係。由於 C# 和 VB 團隊編寫了編譯器,因此 Visual Studio 範本適用於兩者。它允許我們編寫解析原始檔案的程式碼,並且我們可以輕鬆修改原始程式碼。

以下是Roslyn的四個API層

  • 腳本 API:該層提供運行時執行上下文,允許我們使用 C# 作為腳本語言,並且不依賴 Visual Studio 元件。
  • 編譯器 API:此層用於語法,包含對組件和原始碼檔案的引用。該層也不依賴 Visual Studio 元件。
  • Service API:此層在 SDK 之上提供 IntelliSense、格式化、尋找所有參考等。它還有助於管理有關專案的資訊並管理專案依賴性。
  • Workspace API:這一層主要用於透過IDE進行程式碼分析和重構。 Roslyn 讓程式碼變得更容易,由一組 API(如編譯器和服務)組成,提供格式化、Intellisense 等許多功能。它提供對多種語言的支援。工作區 API 提供有關原始程式碼的深入資訊。

2.單聲道編譯器

基於 C# ECMA 標準的 Mono C# 編譯器。它有多個版本,框架有 C# 1.0、2.0、3.0、4.0。 mono編譯器mcs針對framework 1.1,gmcs針對framework 2.0,而smcs和dmcs分別針對framework 2.1和4.0。

  • mcs: 它支援所有 C# 1.1 功能,如匿名方法、可空型別、固定緩衝區、屬性存取修飾符、靜態類別等。
  • gmcs:它支援 C# 2.0 功能,如查詢表達式、物件初始值設定項、部分方法、lambda 表達式、自動實現的屬性等
  • dmcs:它支援 C# 4.0 功能,包括命名參數、泛型型別差異、動態綁定等

其他編譯器,如 RemObjects C# 編譯器,根據 EMCA 規範遵循 C# 標準,除此之外還有實作 C# 和 .Net 的 GNU C# 編譯器。

結論

C# 編譯器就像其他編譯器一樣,將程式碼編譯為機器碼,以便處理器能夠理解該過程。

以上是C# 編譯器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn