.NET生态系统概览
本文要點
.NET 5 預計會在 2020 年發布,屆時將統一所有.NET 平臺。
在進行特性開發時優先考慮性能。
C#語言的發展直接推動了開發者的采用。
開源社區讓.NET 生態系統變得更好。
2002 年,.NET 發布。在接下來的 12 年多時間里,.NET 開發社區以看似穩定的速度增長。然后,情況開始迅速變化。微軟預見到了生態系統的變化,采納了開源開發理念,甚至收購了 GitHub。出現這樣的變化,說明 .NET Framework 開發人員已經準備好迎接剛剛開始的加速發展。微軟后來收購了全球領先的軟件開發平臺 GitHub,而 .NET Framework 開發人員也做好了迎接加速發展的準備。
2014 年 11 月,.NET Core 誕生。對于.NET 生態系統來說,這預示著一個革命性的開源新時代的到來,但這并非一帆風順。困惑和沮喪隨之而來;開發人員還沒有準備好迎接如此巨大的變化。為了消除這種困惑,睿智的.NET 團隊產品經理 Immo Landwerth 開始著手創建一系列視頻,解釋 .NET Standard、.NET Core、.NET Framework 和新的.NET 生態系統的各種細節——通常是坐在溫暖的火爐旁,手里拿著蘇格蘭威士忌。盡管這看起來很愜意,但我認為,如果一位微軟的 PM 愿意坐在火爐旁解釋一些事情,這是一個令人擔憂的跡象。
.NET Standard
開發人員必須了解 .NET Standard,但是多年以后,.NET Standard 仍然讓那些不知道如何使用它的人感到困惑——他們將它誤認為運行時,而它實際上只是一個規范。作為一個目標框架別名(TFM),開發人員可以編寫面向 .NET Standard 的類庫,并使生成的包可以供 .NET Core 或 .NET Framework 應用程序使用。考慮下多平臺。借助編譯器指令,包的作者可以編寫條件代碼,以 .NET Core 或 .NET Framework 為編譯目標。這種標準化可以提供多種滿足標準的實現。使用 .NET Standard,版本可以與 .NET Core 和 .NET Framework 實現保持一致。
.NET Standard 是一個規范。它代表所有.NET 平臺都必須實現的一組 API。
——Immo Landwerth
想象一下代碼維護;感覺如何——一個有趣的概念,但并非沒有一點焦慮。
統一 .NET Core 和 .NET Framework
Landwerth 做了一項了不起的工作,視頻也非常有用,但現在微軟又開始轉向了。在 2019 年微軟 Build 大會上,他們發布了 .NET 5,統一了 .NET Core 和 .NET Framework。
以后將只有一個 .NET,你可以使用它開發面向 Windows、Linux、macOS、iOS、Android、 tvOS、watchOS、WebAssembly 等平臺的應用。
——Richard Lander
是的,沒錯,但值得再重復一遍,.NET 5 的目標是統一 .NET Framework 和 .NET Core。要使這一公告成為現實還有許多工作要做。2019 年是不可能實現的,所以期待 2020 年吧。這將給開發人員社區帶來極大的幫助,因為它讓事情變得簡單!
微軟還利用了 Mono 運行時和 .NET Core 的成果。乍一看可能有點嚇人(再強調一遍,作為開發人員,我們需要擁抱變化而不是害怕它),但是請放心,為實現 .NET 5 所做的所有工作都是以 .NET Core 和 Mono 的成功經驗為基礎。.NET 的統一在真正意義上終結了過去多年來困擾開發人員社區的.NET 生態系統分裂的問題。目前還不清楚 .NET Standard 是否會繼續存在。
未來展望
雖然我們很容易沉溺于過去,對過去的擔憂和挫折牢騷滿腹,但我們必須前進。也許,最合理的方法之一就是統一 .NET Core 和 .NET Framework……我敢說:“讓 .NET 再次變得偉大!”也許我的說法太過了,但我們還是討論一下未來吧。微軟將把我們引向何方?
讓我們先退一步,討論一下我們從哪里來,然后再深入討論我們要到哪里去。并不是所有的.NET 開發人員都知道他們的代碼是如何編譯的以及最終生成了什么。
從一開始.NET 就是基于即時(JIT)編譯器將中間語言(IL)翻譯成最優的機器碼。
——Richard Lander
回顧我之前提到的 Mono 項目,我們知道,在.NET 預編譯(AOT)方面已經做了大量的工作。Mono 已經實現了業界領先的 LLVM 編譯器基礎設施。
Mono AOT 編譯器可以將.NET 代碼編譯成一個可以在機器上運行的本地可執行代碼,就像 C++ 代碼一樣。
——Richard Lander
重要的是要認識到,在 .NET 3.0 之后,不會再移植任何 .NET Framework 特性。再說一次,.NET 5 預計在 2020 年 11 月推出,所以時間是一個重要的因素。雖然這看起來可能是很長一段時間以后的事,但它會很快就會到來。你可以問下自己,“在此期間我們應該做些什么?”我們下次再討論這個問題。
以性能為中心的創新
微軟官方建議您在此期間開始使用 .NET Core 開發新應用程序。如果可能的話,考慮將現有的 .NET Framework 應用程序移植到 .NET Core 也是一個好主意。
新應用程序應該基于 .NET Core 構建。未來針對 .NET 的投入都將投入到 .NET Core 上。
——Scott Hunter
在.NET 生態系統中,.NET Core 一直處于創新的中心。它是一種可以替代 .NET Framework 的運行時,從頭開始進行了完全重寫;這使得針對性能的積極創新成為可能。.NET Core 和 ASP . NET Core 的每次迭代都會在保證一致性的情況下進行改進。“減少分配”是一個非常常見的主題,為的是提升性能。一個新的行業術語誕生了:
Allocaty(形容詞:al·lo·caty)——進行不必要分配的代碼。
——David Fowler
CoreCLR 和 CoreFX 的 GitHub 存儲庫不斷收到大量的拉取請求,都是聚焦于通過減少分配來提高性能。這些努力直接導致了 ASP . NET Core 的誕生。根據 Tech Empower 的基準測試,.NET Core 已經成為世界上速度最快的 Web 服務器之一。見證這些進步令人難以置信,但它們源于大量時間和精力的付出以及社區的參與。微軟是在開放的環境下發展的,這使得開源開發者社區能夠為這些創新做出貢獻。性能改進不局限于減少分配;通過利用硬件的固有特性,甚至可以獲得更底層的收益。
不斷發展的 C#
不用說,我是 C#語言的超級粉絲,而 .Net Core 是用 C#構建的并且以性能為中心。所以,我想在這里稍微討論一下,這可能有點出乎意料。
作為 .Net Core 的一個主題,只要有可能,以性能為重心的新功能不僅應該公開給公眾使用,而且應該在內部使用。
——Stephen Toub
C# 7 及其后續的單點版本,以及現在的 C# 8,都觸及到了社區采用的容忍界限。我非常信賴語言的進化。我支持這樣做,但與此同時,我同情那些因為業務限制而無法采用新版本的開發人員。我能理解這樣的擔憂;您要問下自己——“價值定位是什么?”某些新特性以性能為中心,您可以根據自己的需要考慮這些特性。
在最近 Twitter 上的一個帖子中,Nick Craver 說:“ C# 8 對我來說已經死了,”這句話大致的意思是“StackExchange 要很多年才能升級到 C# 8。”這部分是因為某些 C#特性依賴于公共語言運行時 CLR 的更新。一個例子是“默認接口成員”特性,它目前依賴于 .NET Core 3.0。絕大多數其他特性只依賴于 C#編譯器,這就完美了。
.NET 基金會
鑒于 .NET 術語在 Web 上滿天飛,再多告訴您一個也無妨了。
.NET 基金會是一個獨立的組織,旨在促進圍繞.NET 生態系統的開放開發和協作。它為社區和商業開發人員提供了一個論壇,旨在通過促進開放性和社區參與來鼓勵創新,從而拓寬和強化 .NET 生態系統的未來。
一定要訪問他們的網站并參與其中,或者成為其中的一員。作為成員,你就有資格在董事會投票——同樣,你也有資格成為董事會年度選舉的候選人。我實際上是 2019 年董事會候選人之一。
我建議你訂閱他們的時事通訊,以便可以了解最新消息。
富有意義的發展之路
.NET 生態系統是一個不斷變化的生態圈,我相信它正在朝著一個偉大的方向發展。有了開源和跨平臺這兩個關鍵優先事項,您就可以放心了。當我意識到 .NET Core 和 .NET Framework 是 .NET 生態系統的壓力源,并導致了 .NET 5 的統一時,我個人感到振奮。雖然這幾年頗痛苦,但它也使這樣的創新成為可能。我建議您嘗試移植到 .NET Core,并開始使用 .NET Core 進行任何新的開發;這就是未來。盡管 .NET Standard 的方向尚且未知,但在有進一步的消息之前,我們仍然建議使用它。我希望,無論決定是什么,影響都不會太大。
關于作者
David Pine是微軟的 MVP、谷歌開發專家和內容開發人員。David 喜歡與技術社區共享知識,并在國際會議、用戶組和技術會議上發言。David 熱衷于通過寫作來分享他的想法,并在 davidpine.net 上積極地維護著一個博客。David 的文章已經發表在 ASP . NET、MSDN Web-Dev、MSDN .NET、Dot NET Curry 和 InfoQ 上。作為回報社區的另一種方式,David 喜歡為開源項目和 StackOverflow.com 做貢獻。David 是技術委員會成員,并且是近四年來 Cream City Code 的主要組織者之一。工作之余,他會和他的妻子以及他們的三個兒子 Lyric、Londyn 和 Lennyx 呆在一起。您可以在推特上關注 David(@davidpine7)。
原文鏈接:https://www.infoq.cn/article/A6XZ1b5XSZgGHgOjExr6
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的.NET生态系统概览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net core 使用HttpC
- 下一篇: Azure Application In