.NET Core CLR是技术含量最高,但却是最容易实现跨平台的。因为微软的CLR是C或C++写的,没有GUI,对Win32 API依赖很少,JIT与GC的代码估计都是从头写的。跨平台只需要将CLR的C/C++代码拿到其他平台上重新编译,然后改改就行了。
是在魅力 .NET:从 Mono、.NET Core 说起这篇博文的评论中写的,在此记录一下:
.NET Core CLR是技术含量最高,但却是最容易实现跨平台的。因为微软的CLR是C或C++写的,没有GUI,对Win32 API依赖很少,JIT与GC的代码估计都是从头写的。跨平台只需要将CLR的C/C++代码拿到其他平台上重新编译,然后改改就行了。可以说跨平台的.NET Core CLR已经就位,现在大家只是等微软开源出来取取经,真正能为CLR贡献代码的人少之又少。
.NET Core Framework(跨平台的.NET基础类库)就完全不一样了,虽然微软手上也有,但却是.NET Framework基础类库的严重阉割版,只要对Windows有依赖的类库都得干掉。而.NET平台有三件宝:第1个是C#语法,这是天生跨平台的;第2个是Visual Studio,这是天生不能跨平台的;剩下的就是.NET Framework基础类库。如果.NET Framework基础类库不能跨平台,没人鸟.NET的跨平台。所以微软手上的.NET Core Framework只是个摆设,微软不得不投入大量精力去开发全新的.NET Core Framework(就是现在github上的corefx),一边将.NET Framework中有用的代码搬过来,一边根据跨平台的需求重新实现,看看corefx中System.Console的实现代码就能一窥端倪。这才是.NET跨平台的最大障碍,由此也可以看出.NET基础类库的重要性。所以要了解.NET跨平台的进展,只要看corefox的开源代码就行了。