標籤:

CoreCLR 和 CLR 的差別很大嗎?

現在大部分C#開發人員都在研究.NET Core。.NET Core的公共語言運行時是CoreCLR。在Windows平台上CoreCLR的內存管理,垃圾回收,線程調度等基礎部分和CLR的差別大嗎?CoreCLR是在原來的CLR上加了跨平台的內容,還是完全就和CLR沒關係呢?現在繼續學習CLR的相關知識在以後學習CoreCLR的時候能起到幫助作用嗎?


不請自來,如果一句話回答,從runtime那部分看幾乎沒有任何區別,進程管理,GC,JIT這些基本上是一樣的,只有少數的時候會有不同(主要是針對伺服器的特點,把GC,JIT這種進行專門的優化)。代碼的話一開始的時候coreclr的branch是從clr的branch fork出去的。現在我門在內部開發的時候有對CLR和coreclr定期進行代碼同步。現在core clr可以肯定就是.net runtime的未來,而clr現在存在的目的主要是為了兼容。新的feature大部分都是針對core clr,只有在我們非常確定的情況下才會移植到clr下面。

而在多平台方面確實會有一定的區別。在開發的時候,為了避免重新造輪子這種事情,我們基本上針對linux和OSX重新實現了windows裡面一些system api和微軟C++的裡面的類型,這樣可以維持代碼大部分時候主體邏輯是一樣的,需要對非windows平台編譯的時候,添加和屏蔽某些library就可以了。不過有的時候還是要修改一定的代碼邏輯,比如stack walking這種事情,如果有興趣可以去GitHub - dotnet/coreclr: This repo contains the .NET Core runtime, called CoreCLR, and the base library, called mscorlib. It includes the garbage collector, JIT compiler, base .NET data types and many low-level classes.上找這個macro叫FEATURE_PAL一般被這個ifdef的時候都是非windows平台。不過這些對於學習代碼掌握主體邏輯來講,並不會構成影響。

總之可以這麼說如果你把coreclr和clr兩個裡面的其中一個搞懂,基本上另外一個也就通了。


大部分是從stack上找的,都是程序員,我就不翻譯了。

1..NET Core has two major components. It includes a small runtime that is built from the same codebase as the .NET Framework CLR. The .NET Core runtime includes the same GC and JIT (RyuJIT), but doesn』t include features like Application Domains or Code Access Security. The runtime is delivered on NuGet, via the Microsoft.CoreCLR package.

What"s the difference between ASP.NET 5, .NET Core, and ASP.NET Core 5?

2.CoreCLR started as a copy of CLR. It has been modified to support different OSes. They"re maintained separately and in parallel.

clr - What"s the difference between .NET CoreCLR, CoreRT, Roslyn and LLILC


.net core的頭hunter今年接管了.net。 .net core 未來一統.net 平台是一定的。

微軟動作很快,馬上就計劃盡量統一API,把原先在.net core中砍掉的很多API都給你們補上。

Making it easier to port to .NET Core

Based on these conversations as well as our experience working with first- and third-party partners, we』ve decided to drastically simplify the porting effort by unifying the core APIs with other .NET platforms, specifically the .NET Framework and Mono/Xamarin.


.net core是未來,儘管現在還沒完全代替.net framework,但是這件事情已經在發生了。微軟也正在試圖向各個流行的linux發行版推銷.net core的二進位版本,以後windows也會帶.net core。


CoreCLR是微軟新出的跨平台公共語言運行時,和之前的CLR不同的是前者砍掉了大部分不常用功能,優化了代碼,而且不依賴於類似於iis這樣的軟體,是由線程來進行維護的,程序集領域也是由線程來管理,在吞吐量和運行效率上來說都大大提升。

不過你們也不要擔心之前學的CLR會不會沒用,白學了,做了無用功,這個你們就放心了,CoreCLR會和CLR的API統一,所以你會了後者,前者也就會了!

再補充一句,.NetCore絕對是未來第一編程語言(個人情懷),無論是從家庭背景還是自身能力來講,都是無人能比的。


CoreCLR貌似就是剝離了對Windows, IIS等依賴的CLR。微軟終於明白不剝離那些巨大的依賴,開源也是毫無意義的,因為開源社區的人和那些做「企業級」應用只會抱微軟大腿的人不同,他們就算造輪子也不想碰那些坨狀的產品的。


推薦閱讀:

WPF中如何通過數據綁定使用ProcessBar控制項?
託管應用程序的性能實際上超過了非託管應用程序?
如何學習C#編程?
有哪些原因會導致HRESULT:0x800704A6提示已經計劃系統關機,除了更新系統或瀏覽器?
如何看待 Unity 與 Xamarin 均僅支持 C# 而不支持 VB.NET?

TAG:NET | C# | CLR |