CLR与核心CLR

时间:2018-02-21 14:44:41

标签: .net-core clr coreclr

据我所知,当前状态下的CLR绑定到Windows操作系统,并在内部使用Win32 API提供各种服务。

由于.NET Core与平台无关,因此这基本上意味着相同的IL代码可以在不同的OS上运行。 CoreCLR OS是否具体?或者编写CoreCLR代码以根据当前执行环境/操作系统采用不同的执行路径?

1 个答案:

答案 0 :(得分:10)

来自discussion in coreclr repository

  

据我所知,此repo [coreclr]中的CLR与完整.NET中的CLR相同,唯一的区别在于corefx中的可用API集。

     

...但似乎至少缺少C ++ / CLI ...

回答其他一些问题:

  

由于.NET Core与平台无关,这基本上意味着相同的IL代码可以在不同的OS上运行

是。 IL是一种习惯语言"。您可以为它编写可以在任何平台上运行的解释器/运行时。对于其他语言中的其他中间表示也是如此,包括java字节码,llvm ir,python字节码等。

  

CoreCLR操作系统是否具体?或者编写CoreCLR代码以根据当前执行环境/操作系统采用不同的执行路径?

这是一个混合体。 coreclr的特定构建仅适用于一个操作系统,因为它已被编译为使用该操作系统的功能(包括特定于操作系统的编译器,链接到正确的特定于操作系统的库,以及运行专用于处理该操作系统的代码)。 CoreCLR中还有一个平台抽象层,以便开发人员可以针对一个API进行编码 - 基于Win32 API - 而PAL层将其转换为Linux和Mac上的正确系统调用。正如@HansPassant在评论中指出的那样,有很多#ifdefs--无论是在原生方还是在CoreCLR的管理方。