我了解当前的CLR绑定在Windows操作系统上,并通过内部使用Win32 API提供各种服务。
.NET Core是平台无关的,这意味着相同的IL代码可以在不同的操作系统上运行。CoreCLR是特定于操作系统的吗?还是CoreCLR的代码根据当前执行环境/操作系统采用不同的执行路径?
我了解当前的CLR绑定在Windows操作系统上,并通过内部使用Win32 API提供各种服务。
.NET Core是平台无关的,这意味着相同的IL代码可以在不同的操作系统上运行。CoreCLR是特定于操作系统的吗?还是CoreCLR的代码根据当前执行环境/操作系统采用不同的执行路径?
据我所知,此存储库[coreclr]中的CLR与完整的.NET中的CLR相同,唯一的区别在于corefx中可用的API集。
……但好像至少缺少了C++/CLI……
回答其他一些问题:
由于.NET Core是跨平台的,这基本上意味着相同的IL代码可以在不同的操作系统上运行
是的。IL是一种自定义“语言”。您可以编写一个解释器/运行时,该解释器/运行时可以在任何平台上运行。这对于其他语言中的其他中间表示(包括java bytecode、llvm ir、python bytecode等)也是如此。
CoreCLR是否特定于操作系统?还是CoreCLR代码编写为根据当前执行环境/操作系统采取不同的执行路径?
两者都有。特定版本的coreclr仅适用于一个操作系统,因为它已被编译以使用该操作系统的功能(包括特定于操作系统的编译器,链接到正确的特定于操作系统的库,并运行特定于该操作系统的代码)。CoreCLR中还有一个平台抽象层,这样开发人员可以根据Win32 API编写代码,并且PAL层会将其转换为Linux和Mac上的正确syscall。正如@HansPassant在评论中指出的那样,有大量的#ifdefs——在CoreCLR的本机和托管两侧都有。
CoreCLR 是 .NET Core 中的 .NET 执行引擎,执行垃圾收集和编译为机器代码等功能。
CoreFX 是跨所有平台共享的平台中立代码。平台中立代码可以实现为单个可在所有平台上使用的便携式程序集。
CoreFX 是 .NET Core 的基础类库。它包括用于集合、文件系统、控制台、JSON、XML、异步和许多其他类型的类型。