Dot-Net

.NET CoreCLR、CoreRT、Roslyn 和 LLILC 有什麼區別

  • January 7, 2016

最近我開始閱讀有關 .NET 重組的詳細資訊(主要通過.NET Core github pages)。他們似乎創建了兄弟項目來支持更多平台。在閱讀時,我的印像是 CoreCLRCoreRT是專有Roslyn編譯器的新開源版本。CoreRT 提供本機 (AOT) 編譯。LLILC指導 LLVM 框架的替代實現。

任何人都可以從使用者的角度確認和描述這個項目的差異和目標嗎?為什麼將來有人會使用 Roslyn 而不是 CoreCLR?

Roslyn 是一個編譯器平台,使您能夠為 C# 和 VB 程式語言建構靜態和動態分析工具以及自定義語言擴展和轉換。它還使您能夠將這些語言嵌入到其他語言或應用程序中。Roslyn 包括 C# 和 VB 編譯器和其他工具。這些編譯器發出通用中間語言 (CIL) 程式碼。

要執行此程式碼,必須將 CIL 編譯成目標電腦體系結構可以執行的二進制程式碼。.NET 目前提供了三種方法來做到這一點:

  1. 在應用程序執行時使用 JIT 編譯器將 CIL 程式碼編譯為二進制程式碼。該模型由 CoreCLR 實現。CoreCLR 最初是作為 CLR 的副本。它已被修改以支持不同的作業系統。它們是分開和並行維護的。
  2. 將 CIL 程式碼編譯為二進制程式碼並集成任何所需的 .NET 框架組件以生成單文件自包含執行檔,其性能更接近於編寫本機語言的程式碼。這種技術稱為.NET Native。CoreRT 是該技術的開源實現。.NET Native 和 CoreRT 的主要區別在於前者使用的 AOT 編譯器是 UTC 編譯器(MSVC 編譯器後端),而後者目前使用的是 RyuJIT。UTC 在優化程式碼方面比 RyuJIT 更積極。同樣在 CoreRT 中,執行時的某些組件已在 C# 中乾淨地重新實現。CoreCLR 仍然使用 C++ 實現。
  3. NGEN 與 .NET Native 類似,只是生成的執行檔不是自包含的,需要外部安裝的執行時。

LLILC 是一個基於可移植 LLVM 編譯器框架的 CIL 編譯器。它可用於建構 JIT(目前)和 AOT(未來)編譯器。該編譯器的優勢在於它利用了 Clang C++ 編譯器優化並將 LLVM 可擴展性模型(分析和優化傳遞)引入 .NET。

CoreRT 和 LLILC 是新項目,仍處於早期開發階段,需要更多工作來支持生產應用程序。因此,如果您是使用者而不是貢獻者,CoreCLR 和 Roslyn 適合您。同樣,CoreCLR 是執行時,而 Roslyn 是 C# 和 VB 編譯器。

引用自:https://stackoverflow.com/questions/34665026