据我了解,CLR目前的状态是绑定到windows操作系统上,并在内部使用Win32 API提供各种服务。
由于.NET核心是独立于平台的,这基本上意味着相同的IL代码可以在不同的操作系统上运行。CoreCLR操作系统是特定的吗?或者,CoreCLR代码是否会根据当前的执行环境/OS而采用不同的执行路径?
发布于 2018-02-22 05:43:24
从discussion in coreclr repository
据我所知,这个repo coreclr中的CLR与完整.NET中的CLR是相同的,唯一的区别是在
中设置了可用的API。
..。但似乎至少缺少C++/CLI ...
要回答其他一些问题:
由于.NET核心是独立于平台的,这基本上意味着相同的IL代码可以在不同的操作系统上运行
是。IL是一种自定义的“语言”。您可以为它编写一个可以在任何平台上运行的解释器/运行时。对于其他语言中的其他中间表示也是如此,包括java字节码、llvm ir、python字节码等等。
是特定于CoreCLR操作系统的?或者,CoreCLR代码是否会根据当前的执行环境/OS而采用不同的执行路径?
这是一种混合。coreclr的特定版本只能在一个操作系统上工作,因为它已经编译为使用该操作系统的功能(包括特定于操作系统的编译器、针对特定于操作系统的正确库的链接,以及运行特定于处理该操作系统的代码)。在CoreCLR中还有一个平台抽象层,以便开发人员可以针对一个Win32编写代码-基于Linux PAL层将其转换为正确的syscall。正如@HansPassant在评论中指出的那样,在CoreCLR的原生端和托管端都有大量的#ifdefs。
https://stackoverflow.com/questions/48908739
复制相似问题