CLR 与核心 CLR

CLR vs Core CLR

我了解到 CLR 在其当前状态下绑定到 windows OS 并在内部使用 Win32 API 提供各种服务。

由于 .NET Core 是独立于平台的,这基本上意味着相同的 IL 代码可以 运行 在不同的 OS 上。 CoreCLR OS 是特定的吗?或者是否编写了 CoreCLR 代码以根据当前执行采取不同的执行路径 environment/OS ?

来自discussion in coreclr repository

As far as I am aware the CLR in this repo [coreclr] is identical to the CLR in full .NET and the only differences are in the available API set in corefx.

... but seems like there is at least C++/CLI that is missing...

回答其他一些问题:

Since .NET Core is platform independent, this basically implies the same IL code can run on different OS

是的。 IL 是自定义的 "language"。你可以为它写一个interpreter/runtime,它可以在任何平台上运行。对于其他语言的其他中间表示也是如此,包括 java 字节码、llvm ir、python 字节码等等。

Is CoreCLR OS specific? Or is CoreCLR code written to take different execution paths depending upon current execution environment/OS ?

这是一个混合体。一个特定的 coreclr 版本只能在一个 OS 上工作,因为它已被编译为使用那个 OS 的特性(包括 OS-specific 编译器,链接到正确的 OS-specific库,以及 运行ning 特定于处理该 OS 的代码)。 CoreCLR 中还有一个平台抽象层,因此开发人员可以针对一个 API 进行编码 - 基于 Win32 API - PAL 层将其转换为 Linux 和 Mac。正如@HansPassant 在评论中指出的那样,有大量的 #ifdefs - 在 CoreCLR 的本机端和托管端。