.net core CLR与核心CLR

.net core CLR与核心CLR,.net-core,clr,coreclr,.net Core,Clr,Coreclr,据我所知,当前状态下的CLR绑定到windows操作系统,并通过内部使用Win32 API提供各种服务 由于.NET核心是独立于平台的,这基本上意味着相同的IL代码可以在不同的操作系统上运行。CoreCLR操作系统是特定的吗?或者CoreCLR代码是根据当前执行环境/OS编写的,以采用不同的执行路径吗?来自: 据我所知,此repo[coreclr]中的CLR与full.NET中的CLR相同,唯一的区别在于corefx中的可用API集 。。。但似乎至少缺少了C++/CLI 要回答其他一些问题,请执

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

由于.NET核心是独立于平台的,这基本上意味着相同的IL代码可以在不同的操作系统上运行。CoreCLR操作系统是特定的吗?或者CoreCLR代码是根据当前执行环境/OS编写的,以采用不同的执行路径吗?

来自:

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

。。。但似乎至少缺少了C++/CLI

要回答其他一些问题,请执行以下操作:

由于.NET核心是独立于平台的,这基本上意味着相同的IL代码可以在不同的操作系统上运行

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

CoreCLR操作系统是特定的吗?或者CORECRL代码是根据当前执行环境/操作系统编写的,以采用不同的执行路径吗


这是一种混合。coreclr的特定构建只能在一个操作系统上工作,因为它已编译为使用该操作系统的功能(包括特定于操作系统的编译器、针对特定于操作系统的库的链接以及运行特定于处理该操作系统的代码)。CoreCLR中还有一个平台抽象层,因此开发人员可以根据一个API(基于Win32 API)进行编码,PAL层将其转换为Linux和Mac上正确的系统调用。正如@HansPassant在一篇评论中指出的那样,在CoreCLR的本机端和托管端都存在大量的“ifdef”。

“不同路径”是错误的思维模式。首先,Unix对可执行文件具有完全不同的格式。因此,您需要一个C++编译器和链接器,可以正确地处理这个问题,目前是GCC工具链AFAIK。和#定义一组与所需目标操作系统和处理器匹配的宏。源代码中包含了一个y~(i)的装船,这总是C++平台需要跨平台的方式。他们目前有10台构建服务器在工作,不断地寻找错误。@HansPassant谢谢!!“源代码中充斥着大量的#if”,你是说CoreCLR的同一个副本适用于所有操作系统?大致上,只有一个代码库,但有些文件永远不会在特定的构建中使用,因为它们太特定于操作系统。但是在另一个版本中使用。@HansPassant我不得不对你的整个答案表示怀疑,只是因为CoreCLR的来源表明它需要的是clang,而不是gcc。这就是为什么我说“afaik”,我在cmake文件中看到了很多“gcc”。但当然,把它全部抛在脑后。