理解 .NET 2015

jopen 9年前發布 | 15K 次閱讀 .NET

去年跟著BUILD之后,我發了一篇文章Exciting Times for .NET 并從那以后我已經很榮幸地能夠與.NET團隊并肩作戰,這其中包括了運行時、框架、語言和編譯器。雖然去年我的重心已經更多轉移到了內部社區,但是就像為 了同行而幫助運維內部會議一樣,我也花費了一些時間幫助.NET基金會取得了一些進展并且了解了許多關于開源社區的東西以及學習了所有我們.NET基金會 的項目。好,開心的是我也結婚了,這是我人生中的一個轉折點。我從一個社區“傳教士”儼然成為一個“先驅”或者說是一個“橋梁”  。我真的挺喜歡 Alex Hillman的格言: Tummler.

既然我們正在走進BUILD, 我甚至更加激動于我們所做的進展,特別是關于.NET平臺本身的,還有團隊開源的方式。現在已經有了許多關于.NET動向的尋覓,因而我認為我已經寫了一 篇高級“架構性”博文來幫助人們理解各個部件以及該如何在哪兒參加這些項目(的開發當中)。換句話說,這將是一個開始學習.NET 2015的好地方。至少這是我想看到的! 

.NET 2015 – 10,000 個腳視圖

在一個非常高級的層面上,這是落于.NET 2015傘下的主要部件綱要。理解 .NET 2015

重要的是,我們需要注意這兒有三個主要的.NET核心的投資去向, 而這些足夠影響著主要部件的開發。

  1. .NET Innovation(.NET創新) – 帶來了平臺推動與創新(譯者注:這種創新跟Creation還不一樣哦)。我們將使得每一層變得更加現代化(譯者注:就是更加科學、實用、流行) ,這其中包括了語言、編譯器、基類庫、應用模型、運行時以及工具。

  2. Open Source (開源)– 將工程進程引入一個開放環境,在社區的幫助支持下開發,繁殖一個富有生命力的生態系統。

  3. Cross platform (跨平臺)– 拓展.NET到Linux和Mac平臺,因為我們的消費者逐漸地在多樣的環境中工作著。

.NET 2015 的主要部件

Frameworks and Runtimes(框架和運行時)

.NET框架是一個托管的可執行環境,其為需要運行的應用提供了許多服務。它有兩個主要部分:公共語言運行時(CLR),這是用于處理運行應用的可執行引擎;另者則是.NET框架類庫,它提供了一份經過測試且可復用的代碼來給開發者們在自己的軟件中調用。

.NET Framework 4.6 建立于4.5.2之上并添加的新的API,改進了事件追蹤,還修復了N多BUG。 這是至今我們所知的最新版完整的 .NET 框架。.NET Framework 4.6 將直接包含于 Windows 10并被推送至老版本系統的Windows Update 中(Vista及以上). 看: .NET Framework 2015 Preview

.NET Core 5 是一個綜合性目標, 模塊化的框架可以被相當廣闊的應用模型和平臺所使用,同樣開源,可被模塊化同時本地化部署,并且在微軟的促進下將支持 Windows, Linux 和 Mac OS X 系統。有這么一套包含了基類庫 (corefx) 和運行時(coreclr) 的重構集,(CORECLR)包含了一個全新的JIT編譯器(“RyuJIT”), .NET 垃圾回收器,本機交互以及其他許多的.NET運行時組件。 今日,.NET Core 在Windows 上建立并運行。 接下來的幾個月內,我們將正在通過加入一些具有平臺特性的組件到 Linux 和 Mac 實現當中 。看: Introducing .NET Core and CoreCLR is now Open Source

如果你僅僅只看本文中的一個外鏈,請一定看這個Introducing .NET Core. Immo 將大量詳述解釋為什么我們需要它以及如何去適應。

Compilers(編譯器)

The .NET Compiler Platform(.NET平臺編譯器) ("Roslyn") 開 放了 C#源碼和富含許多分析API代碼的Visual Basic 編譯器。這樣就能夠通過使用相同于VS所使用的API來建立代碼分析工具(譯者注:這很酷啊!)。 Roslyn會生成平臺獨立的中間語言(IL) ,并在建立.NET 2015時就使用了, 其中就有Framework和Core. 發布版本中,一整個.NET 框架將使用Roslyn編譯。關鍵語言VB 和C#創新的地方也不例外。 看: Roslyn on GitHub. F#語言和編譯器同樣有創新。看F# on GitHub.

“RyuJIT”在 x64位的.NET上是新的默認(JIT)編譯器。在運行時侯,JIT編譯器使用IL語言首先為特定架構機器編譯。 而對于桌面和服務器情景, RyuJIT 較之前的x64位JIT編譯器大大修改以減少啟動時間。同樣包含了支持SIMD (單指令、多數據) ,這就允許對集合中的數值進行并行化數學運算。這對于一些依賴向量運算的應用而言可以極大地提高運算速度(譯者注:比如像MATLAB這樣的軟件就是靠向 量化編程)。看: The next-generation JIT compiler for .NET

.NET Native(本機化) 將C#編譯成機器碼形式將使其性能堪比C++,這樣開發者將得益于.NET 框架所帶來強大的生產力、親和性以及本機代碼所帶來的性能。舉個例子說, apps 基于 .NET開發后將編譯成中間語言(IL)。在運行時,(JIT) 編譯器才將其轉為機器碼。 而對比而言, .NET Native 就是一個預編譯器用于將app直接編譯成機器碼并只花費很小的CLR運行時間。通過在.NET Native上編譯之后,受歡迎的微軟應用商店上的app啟動速度將快60% faster 以及少用了15-20% 的內存。普遍的微軟apps將運行在.NET Native (ARM, x86, x64). 看: Compiling Apps with .NET Native

App Models(應用模型)

應用模型擴展了 .NET 框架 4.6 和 .NET 核心 5 的公用庫。Windows Forms, WPF, ASP.NET Web Forms, MVC 5 等 這些如今你所熟知的應用模型將成為.NET Framework 4.6的一部分,還有一些新特性將與你見面哦, 這也得益于語言中的創新,還有Roslyn 編譯器和RyuJIT。將在.NET 4.6整體上有很多改變。 看: ASP.NET Overview – What about Web Forms?, The Roadmap for WPF.NET Framework 2015 Preview

稍微透露下,將有新的應用模型是特地設計于運載在優化的.NET核心5上的。

ASP.NET 5  是另一種專門用于建立現代網頁應用的.NET應用模型。該模型重新建立了來提供一個優化的開發框架以支持可部署在云端或用于內部事務的應用。其由許多開銷最小的組件組成, 因此可以在構建解決方案的時候更加彈性。 ASP.NET 5 可以在.NET Framework 4.6 或者.NET Core 5上面運行。 現今ASP.NET 5 通過Mono 運行時 在Linux 和Mac上跑。有朝一日.NET Core 支持了Linux 和Mac, 那么 ASP.NET 5 將很容易在那些平臺的.NET Core 上跑。 看: ASP.NET 5 Overview Introducing ASP.NET 5

Universal Windows apps(統一微軟應用) 是一種應用模型,其允許你在 Win Phone 和 Win app(8.1+) 之間共享代碼 (8.1+) 并部署于微軟商店。Universal Windows apps 將運行于.NET Native。 看: Building universal Windows apps for all Windows devicesGetting Started with .NET Native

那么什么是.NET Core,我真的很羅嗦嗎?

.NET Core 5 是一個綜合性目標, 模塊化的框架可以被相當廣闊的應用模型和平臺所使用因為其有這么一套包含了基類庫 (corefx) 和運行時(coreclr)的重構集。the .NET Core 基類庫(BCL)所用APIs 對于不同應用模型是同一的。APIs 并不是看起來一樣的 – 而是他們共享了相同的實現而已。主要的APIs/程序及被大量分解為模塊而且是平臺獨立的。

App-local (或者說也是同時的)部署也是.NET Core的關鍵特點。 你可以選擇與你app相關的package來隨著app部署。模塊化的 packages 可通過 NuGet 來獲得。 這意味著你的程序將被隔離運行并且不受機器上諸多.NET框架完整版本的影響。你的APP可以像x-copy命令那樣華麗地部署,而無需操碎了心。

同時,.NET Core 在微軟的促進下將支持 Windows, Linux 和 Mac OS X 系統。今天,.NET Core 在Windows 上建立并運行,但我們將正在加入一些具有平臺特性的組件到 Linux 和 Mac 實現當中。而且所有都是開源的。其中相當重要的是為基金會拿下跨平臺和建立更強大生態系統做了保障。理解 .NET 2015

從編程到運行程序– .NET Core 開發

我認為去了解工作如何進行的一種心理上的的模型/流程這樣的技術總是很受益的。如下是我關于開發基于.NET Core應用的簡單示意圖 , 描述了從編碼/生成/調試 循環圈到應用部署和執行。。不同的應用模型上的部署和執行是不一樣的。

理解 .NET 2015

你寫代碼的的同時需要引用相當多的BCL和應用模型中你需要的模塊。Roslyn 是這么一種編譯器,可以處理你的代碼并生成平臺獨立的中間語言(IL)。在編譯流水線一旁,提供了豐富的API集讓你對你的代碼做足夠徹底的種種分析。若 你正在使用 Visual Studio, 將有數以噸計(就是很多的意思)的新IDE 特性等著你來更好地使用這些API以滿足你的編程生產之旅。

如果你建立了universal Windows 應用, .NET Native 本機化工具鏈將負責剩下的事情。引用將在最短的運行時間內隨著你的app建立同時被本地化部署到本機鏡像中。若您正在建立 ASP.NET 5 應用, 引用和 CoreCLR 將被隨著app本地化部署到服務器。JIT 編譯隨之發生于開始使用 RyuJIT。

 補充說明,ASP.NET 5 允許你在代碼中做些改變然后保存,接著刷新瀏覽器,而不需要明確地重建項目。Visual Studio 使用 Roslyn 以支持動態編譯。你仍然可以擁有所有的結構體以及使用編譯好的框架,但是開發體驗上就像口譯一樣(很令人捉急)。

注 意: 若你面向完整的 .NET Framework 4.6 開發,那么你將仍然可以享受語言的創新以及 Roslyn 編譯器。應用部署并沒有從其現在工作的方式中發生改變, 其仍然依賴于機器上安裝的完整版本的框架,但是JIT 編譯通過優化過的 JIT 編譯器--RyuJIT。

現在開放了啥?

許多 .NET 2015的部件是開源的并由 .NET 基金會指導著工作. 在這些項目上,我們正在積極地與社區進行開放相關的工作。理解 .NET 2015

您可以看.NET基金會支持的所有工程的repos 和 activity ---GitHub: http://dotnet.github.io/

這兒是一些對應的開始的好地方。查看這些非常詳細的Readme和contribution所能提供的向導。

值得注意的是,完整的 .NET 框架是 “開源的”。也即是說, 我們并沒有正在貢獻什么,并且在 OSI 認可的 License 的保護下并沒有的完整地放出來,但是,你可以在這兒探索源代碼(老外說話真累...): http://referencesource.microsoft.com/

開放中的工程學

OSS(開源軟件) 對于微軟而言并非新奇之物,但是對于.NET運行時和庫來說是全新的概念。這是一個非常大的工程啊,要15年之久,以至于相當多的人在內部已經工作了那么 久,其中不僅是移植代碼,還有開放中的道道工序。這是很耗時的。這也就是為什么團隊從一小部分基類庫開始的原因了,同時這一路上發布了越來越多的東西,當 然也學到不少東西。 那些學習以及最佳實現已經在整個團隊泛起了漣漪。 在貢獻榜中我們不得不學會謙虛:overwhelming support and contributions so far

您可能會思考 “現今我沒有足夠的時間建立我自己的APP,更不用提為CLR碼代碼了!” 說得好啊,我和你想到一塊兒了!你可以選擇你想要的方式來參與其中。你沒必要寫代碼以成為貢獻者。(但你可以) 提出一個問題, 去評價一個提議, 回答一個問題。或者僅僅是在這上面瞧一瞧看一看

您可能還會想“我不想失去我過去所習慣的簡潔性、高質量、支持性(這些特點)”別急!我們仍然為了相同之前級別的質量和服務而獻身。不妨簡單想想,所有我們做所的工作只是把工程都置于開放之中。(但是)每一件我們以前在內部為了建立高質量軟件所做的是仍然在同樣的地方、環境條件下進行,只不過現在我們都是公開進行的。

我真的對團隊的新文化以及.NET的未來感到很激動啊。

享受吧!

[更新 2/26/2015] – 我已經注意到 dotNetConf 2015 正在來臨,于此你可以了解更多。這是由來自社區和產品團隊的演講者發起的免費虛擬會議。可在三月18、19號在線流媒體收看(譯者注:注意時差)。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!