虚拟研讨会:.NET的未来在哪里?
.NET生態系統在過去的一年中發生了很多事情。在幾個方面發展非常迅速:Xamari、UWP、.NET Core、.NET native、F#和開源等等。
如果要關注細節,那大的景象難以描繪。因為在每個方面都有新的動作:跨平臺、云、移動、Web應用和通用應用。開發人員都想知道這一切會造成什么改變,要實現改變必須要做些什么。
小組成員:
Richard Lander,Microsoft .NET團隊首席項目經理
Phillip Carter,Microsoft .NET團隊項目經理
Phil Haack,GitHub工程總監
Miguel de Icaza,Microsoft杰出工程師
InfoQ:.NET及其語言將向哪里發展?會面臨到什么挑戰?
Richard Lander:通過觀察目前廣泛支持.NET的設備和操作系統,還有最近的.NET Core,你就可以展望到.NET的未來。你可以使用.NET構建任何類型的應用程序,包括移動、Web、桌面以及IoT。有趣的是,.NET在很小一組開發平臺上,但可以在許多平臺上運行,具有很高的生產力和不斷發展的語言、工具和企業支持。總之,這就是我們對NET的觀點。
選擇開源.NET Core對.NET產生了巨大的影響。我們看到大量的開源開發者參與到.NET
Core和相關項目中來,.NET相關活動在GitHub也快速上升。許多企業對.NET的重大興趣和認真參與也讓我們感到非常驚訝。一些大的公司也加入了.NET基金會,比如說Samsung和Google。我們很高興能看到其他很多企業表態:“.NET對我們的業務非常重要,我們需要更多參與到其中”。我們將會繼續開放和協作,采取更多方式來提升.NET。
2016年,Visual Studio for Mac的推出是很大的驚喜。它包括Xamarin和ASP.NET Core的工具。Visual Studio for Mac這款產品也表明了Microsoft的態度,就是我們正在認真促進跨平臺開發。我們還有Windows、Mac和Linux平臺的免費工具可以選擇,因此想要開始使用.NET非常簡單。
遇到的挑戰是想要讓人們意識到.NET不僅僅只是屬于Windows平臺下的,它已然變為了你下一個項目可以使用的值得信賴的跨平臺開發選擇。我們在過去幾年內做了一些巨大的改變,比如獲取Xamarin,開源.NET Core并搭建跨平臺工具支持。我們還有很多工作要做,才能讓人們對產品產生興趣,這是前進的關鍵點。
Philip Carter:對于.NET來說,現在最大的焦點莫過于.NET Standard Library 2.0和盡可能多使用容器技術(例如Docker)的經驗。.NET Standard Library 2.0成就了絕大多數跨平臺.NET APIs,并為開發人員刨根知底他們所編寫的代碼提供了一種簡單的方法。如果你依賴的唯一.NET APIs來自.NET Standard Library,那可以確保在.NET運行時你的代碼能夠在任何地方運行,而你不需要付出額外的工作。同理NuGet包也是一樣的,如果你的系統依賴于.NET Standard Library,它可以在任何其他地方運行。從代碼共享的角度來看這是非常重要的,甚至它對于長期的靈活性也非常重要。需要目標Linux?你所有使用.NET Standard Library的代碼都在那里運行。我們也非常重視容器,希望你能非常容易地將代碼部署到容器,因此我們正在構建工具來實現這一點。
對于.NET語言,我們正在努力為我們的語言創造開箱即用的工具。在即將發布的Visual Studio中我們提供了一些具有生產力的功能,在未來我們也會構建更多的工具。在語言功能方面,C#和Visual Basic將著重于繼續添加F#中已有的函數式編程功能,比如基于表達式的模式匹配和記錄以及可區分聯合類型。不可空性也是我們感興趣的一個重大領域。F#可能更關注于更好的IDE工具,它已經具備了前面提到的這些功能,但是缺乏與C#和Visual Basic一樣的質量工具體驗。總之,會有更多功能來輔助函數式編程,并為每種語言創建更好的工具。
面臨的最大挑戰在于發布上述提到的有質量保證、可支持的軟件需要耗費的大量工作。
Phil Haack:C#正朝著一個偉大的方向發展。目前其設計在GitHub上開放,社區可以跟進并為其發展做出貢獻。它添加了很多靈感來源于函數式編程的功能,這讓寫代碼變得更加愉悅。F#仍然是奇妙的函數式語言,它為C#很多功能激發了靈感,但似乎很難躋身主流語言行列。
.NET正在努力成長為跨平臺開發的強勁選擇,但在保持相對性和增長方面仍然面臨著挑戰。雖然C#開發人員非常緊缺,但在學校、bootcamps和code academies中教C#的比例與Node和JavaScript相比少了太多。雖然.NET生態系統很強大且在不斷增長,但它還是非常依賴于Microsoft。很少有大的公司為其OSS項目做出貢獻。NPM包數遠多于NuGet。擴大獨立的社區非常重要。
另一挑戰是現在Web的通用語言是JavaScript。因此,在成為跨平臺語言方面,Node和JavaScript有著巨大的吸引力,而C#比較少見于構建Web應用程序。這也就解釋了Electron這樣的平臺的吸引力,它可以讓你把你已經擁有的許多Web開發技能帶入到本地應用程序開發中來。因此C#和F#還需要做一些努力來超過其他的語言(JS在前,C#在后)。
Miguel de Icaza:.NET延續了它在第一次推出時就確定的一個傳統。它是一款不斷根據開發人員需求發展的框架,它一直擁有強大的互操作性并努力在實現生產力的同時確保性能。
今天,.NET幾乎可以在所有可用的平臺上使用:從服務器、臺式機到移動設備、游戲機、虛擬現實、增強現實環境、手表,甚至是像Raspberri-Pi等類似的小型嵌入式系統。
整個框架以一種最開放的方式開源了代碼,這也增加了成為未來Unix系統的核心組件到業界制造的新型秘密設備的可能。
實現生產力并確保性能對我來說非常重要,因為我從2000年開始使用.NET,那時候計算機只有現如今計算機的一小部分功能,但是.NET已經提供了高性能運行,可以幫助開發人員創造出健壯的軟件。這是通過保證安全的編程環境,通過設計避免常見的編程錯誤實現的。
這種實現已經被證明非常有用。我們需要隨身攜帶便攜式電腦,尤其是對于游戲開發人員來說,便攜的電腦非常重要。開發人員仍然希望在小部分時間內,在沒有高端計算機等設備的情況下創造出健壯的軟件。
至于挑戰,這部分非常有趣,我想分享關于一開始概要中提到的框架的發展歷程的例子。
就像我所說的,.NET的一個文化優勢是根據市場的需求不斷調整框架。從需要在本地完成的任務(比如運行環境優化)到分布式級(更高級的框架)。
在過去的幾年中,我們不得不縮小框架來適應性能不足的設備,我們創造了智能鏈接器,將更智能的代碼生成并創造映射到新的硬件的APIs上。
這種趨勢一直持續了下去。舉個例子,過去一年的重點任務就是完善.NET,支持開發高性能服務器和客戶端代碼的新型用戶。這需要引入新的類型、原語和堆棧中的編譯器優化。另一方面,現在.NET的開發人員可以使用Microsoft創造的技術(Orleans、ServiceFabric)或是社區創造的技術(MBrace)來創建分布式系統。
在互操作性領域我們一直在各個方面開展工作。我們正在努力讓.NET程序員可以更簡單地利用其他框架和語言寫的代碼,簡化了在其他語言中使用.NET代碼(我們已經支持第一類C、C++、Java和Objective-C),并簡化了利用Azure AutoRest等工具與其他服務進行網絡通信的過程。
InfoQ:Roslyn的出現是如何幫助.NET和你們的語言(C#/ F# / VB .NET酌情而定)的成長的?
Richard Lander:這是一個非常簡單的問題,可能我的回答會涵蓋一些其他方面的內容,提及運行環境。.NET運行環境存放這些語言和Roslyn,將其模型(大多是垃圾收集和類型安全的內存)展示給開發人員。所以,缺少的是C++(其他同行忽略不計)。.NET運行環境團隊用C++編寫,Roslyn就可以存在,你就可以使用C#。他們真的非常寬容!
csc.exe(原來Roslyn C#編譯器)也是用C++編寫的,所以同樣的情況也適用于那里。
事實證明,編寫平臺原生組件的開發人員更喜歡C#。第一次這么聽說是嗎?他們正在積極地尋求用C#完成更多工作,并將更多的代碼庫轉換為C#。這是過度簡化,但你可以將Roslyn僅僅認為是用C#重寫csc.exe的一個項目。同時,用C#重寫運行環境組件也同樣重要。由于有引導問題,用C#重寫運行環境組件需要付出很多努力,但它是值得的。
C#代碼庫和C++相比有很多優勢,原因如下:
它大大增加了可以參與到代碼庫貢獻中來的開發人員的基數。
我們有非常優秀的C#工具,可以讓開發變得更為高效。
可以直接讓.NET庫運行在其他芯片和操作系統上。這對于在像Raspberry Pi上開發.NET Core這樣的代碼庫是很好的。
更容易了解安全問題。
因此在我看來,最主要的事情就是將現有的C++代碼庫轉移到C#上。它使我們變得更加高效,讓更多.NET開發人員可以更方便地了解和操作基礎平臺。
Philip Carter:Roslyn對我們發展.NET非常關鍵,它幫助我們Microsoft構建更好的工具,并為開發人員提供了一個新的平臺在語義上深入理解其代碼庫,以構建新的一組工具。
從語言開發者的角度來看,Roslyn的直接好處之一是現代化的架構,可以添加新的語言功能,比以前C#和Visual Basic的編譯器更為容易。Roslyn還推出了Roslyn Workspaces,這是一個跨平臺編輯器抽象層。現在用于Visual Studio和Visual Studio Code(通過OmniSharp),可以更輕松地利用各種語言服務。此外,F# 4.1將成為第一個使用Roslyn Workspaces和自己的語言服務的F#版本,改進了大量IDE工具并引入了新的功能。我們可以將F#視為市場上唯一一款有高質量、一流的IDE工具的函數式編程語言,它一定有助于.NET的發展。Roslyn Workspaces可以幫助我們為所有.NET語言提供更好的語言特性。
Roslyn Analyzers通過提供一組APIs,讓你為C#和VB代碼庫構建一組自定義工具,促進.NET的發展。第一個改進是讓人們可以更容易地構建強大的靜態分析工具,但是你可以進一步使用像語義diff工具或其他需要了解你代碼語義結構的東西。先于Roslyn出現,但是它實際上只適用于常使用靜態分析工具的人。有了Roslyn Analyzers之后,這方面的開發現在由任何.NET開發人員完成。
Phil Haack:這有很大的影響。在Roslyn之前,實現代碼分析器的想法僅限于少數深入了解深奧原理的人。它的出現可以大眾化地提升編譯器,也為參與語言設計的人們鋪平了道路。一方面提出了新的語言功能,另一方面也可以讓其他人嘗試它,并聽取他們的想法。
Miguel de Icaza:它幫助統一了我們所有支持的平臺上的C#使用體驗:Visual Studio、VSCode和Xamarin Studio,還有新的開發技術,可以輕松地編寫活動代碼,并在iPad上使用Xamarin Workbooks或是Continuous嘗試活動代碼。
關于工具,開發人員不得不依靠未成熟創建的語言或是黑客。在C#世界中不必再這樣做,因為我們現在有了新的方法,開發人員可以完全掌握C#程序,操縱它并用完全相同的方式探索其語言世界。
F#較為獨立,它結合了.NET世界和函數式編程。這是一種總能引領潮流并非常適用于數據處理的語言。在這個對于機器學習興趣異常高漲的時候,F#正是解決問題的良方。
InfoQ:開發人員要如何用官方的.NET平臺、.NET Core平臺和Mono stacks?有辦法“跟上”嗎?什么應該用于新項目呢?
Richard Lander:2017年我們的主要目標是減少你需要跟上的事情的數量。最初,我們的設計是希望.NET Core與其他的.NET平臺能有顯著的不同。后來,我們就推翻了這些決定,在Visual Studio 2017版本中讓.NET Core與其他的.NET更為相似,在該版本中你會發現.NET Core和.NET
Framework以及Xamarin一樣,轉為使用msbuild構建引擎。這樣的改變能幫助.NET mobile和Web項目協同工作的體驗變得更加簡單。
我們還標準化了所有.NET平臺都有的最小APIs集,稱之為“.NET Standard”。我們將在2017年推出.NET Standard 2.0,并提供它的各種實現。這是我們曾定義且發布過的最大一組常用APIs。它比最大的Portable Class Library profile還要大兩倍。一旦.NET Standard 2.0在所有.NET平臺實現,很多事情會變得更容易。許多人都期待它的發布,這是改變游戲規則的標準。
Philip Carter:這個問題問得很好,特別是在我們這么多年以來搭建了這么多東西的情況下。這是我喜歡的框架方式:
.NET是跨平臺的開發棧。它有一個標準庫,稱為.NET Standard Library,其中包含了大量的APIs。這個標準庫由各種.NET運行環境實現:.NET Framework、.NET Core和Xamarin-flavored Mono。
.NET Framework就是現有的開發人員一直使用的.NET Framework。它實現了.NET Standard Library,就是說任何僅依賴于.NET Standard Library的代碼都可以在.NET Framework上運行。它包含了其他Windows專用的APIs,比如說用于Windows桌面開發的APIs如Windows Forms和WPF。.NET Framework針對構建Windows桌面應用程序進行了優化。
.NET Core是針對服務器工作負載優化的新的跨平臺運行環境。它實現了.NET Standard Library,就是說任何使用.NET Standard Library的代碼都可以在.NET Core上運行。該運行環境適合新的Web開發棧ASP.NET Core使用。它是現代的、高效的并為處理大規模的服務器和云工作負載設計的。
Xamarin-flavored Mono是Xamarin應用程序的運行環境。它實現了.NET Standard Library,就是說任何僅依賴于.NET Standard Library的代碼都可以在Xamarin應用程序上運行。它包含了其他iOS、Android、Xamarin.Forms和Xamarin.Mac使用的APIs。它針對在iOS和Android上構建移動應用程序進行了優化。
此外,從即將發布的Visual Studio版本開始,運行環境中的工具和語言都將變得很常見。當你創建任何類型的.NET項目時,你將使用新的,但是已經由.NET開發人員使用過多年的兼容的項目系統。MSBuild用于構建項目,這就是說現有的構建系統可以用于任何新的代碼,任何.NET
Standard或.NET Core代碼可以與現有的.NET Framework代碼一起使用。所有.NET語言在每個運行環境中都會用相同的方式編譯和運行。
什么應該用于你的新項目呢?這取決于你的需求。Windows桌面應用程序?請使用.NET
Framework,就像你之前一直做的一樣。服務器或Web應用程序?請使用ASP.NET Core,運行在.NET Core上。移動應用程序?請使用Xamarin。類庫和NuGet包?請使用.NET Standard
Library。使用標準庫對于在你的所有應用程序中共享代碼非常重要。
要想跟上的最好方法就是閱讀官方的.NET文檔。官方的.NET博客也有很多有關這些問題的帖子,但請注意,以前的帖子并不能準確描述最新的.NET發展。
Phil Haack:我傾向于比較保守。對于我的業務依賴的生產項目,我將使用經過試驗的、真正的官方.NET平臺。但對于我的下一個項目,我一定會使用.NET Core,它沒有十多年向后兼容性的需求。
Miguel de Icaza:多虧有.NET Standard,特別是我們在.NET Standard 2.0中交付的APIs,開發人員不需要太多地考慮哪個運行環境來運行他們的應用程序。跟上.NET的人可能有興趣了解我們為某些特定用例優化的運行環境(例如說,為移動應用和游戲優化的Mono),但是在極大多數程度上,開發人員只需要知道,無論他們有什么需求,我們都已經為他們滿足了。
當談論到選擇運行環境的問題,選擇方式應該是這樣的:
.NET Framework是以Windows為中心的框架,為Windows開發人員提供最好的服務。如果你正在搭建Windows為中心的應用程序,請你選擇它。
.NET Core是云優化引擎,它是跨平臺的。它使用相同的高性能JIT編譯器,但在所有支持的操作系統(Windows、Linux、macOS)上運行代碼。它沒有特定的Windows
APIs,因為這有悖于跨平臺的目標。Mono是用于移動應用和Apple平臺(Android、iOS、watchOS、tvOS)的運行環境,用于游戲控制器和Unix桌面應用程序。
InfoQ:你喜歡其他語言的什么功能,并會考慮使用?(C#/ F# / VB .NET酌情而定)
Richard Lander:我喜歡JavaScript(以及其他類似JavaScript的語言)的一點是,你可以直接在文件中開始寫代碼,即使是一行代碼也可以運行。沒有什么復雜的流程,也沒有具體的概念要(提前)學習,這很有價值。有一些C#腳本解決方案也是這樣的,但它們沒有很好地集成。我們的一些語言功能也在朝這個方向努力,但還沒有做得這么好。我想如果能有個單行C#文件,作為"Hello World" Web API,那就太棒了。
作為處理運行環境的人,我想把問題再次引回運行環境上。比如說我喜歡JavaScript和PHP,因為它們可以從源代碼快速讀取并執行。我也喜歡Go,因為它生成可執行的本地單個文件。.NET是極少數的可以同時做到這兩點的平臺之一。我想看到我們為.NET開發人員提供這兩種選項,它們在真實場景中非常實用,特別是對于云編程來說這兩個選項都很有幫助。
Philip Carter:我們最喜歡C#和Visual Basic的功能之一就是不可空性。其中最大的,經常造成“十億美元損失的錯誤”的問題就是空。如果沒有在代碼庫中檢查是否為空,那么每個.NET開發人員都要努力尋找錯誤。可以將類型標記為非空就解決了問題,把空的問題從運行時問題轉換為編譯時問題。然而,要實現這一點是很大的挑戰,因為目前C#和Visual Basic的代碼庫沒有不可空性。因此,這種功能可能需要選擇性加入,并且不能破壞現有代碼。這在F#中實際上不算很大的問題,因為空性和不可空性已經是這個語言的功能了。然而,當與其他.NET類型互操作時,F#開發人員還要關注空的問題。我們對選擇性加入不可空性非常感興趣。
我們感興趣的另一組語言功能是能夠實現更好的即時多態性,即協議/特性和類型種類。它們可以幫助你擴展現有類型的功能,尤其是更靈活的類型種類,可以幫助你定義某種行為,而無需將其“固定”到某種特定類型上。像任意類型的層次結構的語義等價比現在更為簡單。雖然協議/特性和類型種類并不在我們的路線圖中,但它們確實非常有趣,并幫助解決了你能碰到的有關.NET語言的一些細微問題。
Miguel de Icaza:我不負責這些語言的發展,但是作為一個用戶,我也希望C#和F#能包含這些功能。
對于F#我的要求很簡單:從個人來說,我非常依賴于它原來寫循環的方式。我希望在循環中支持break和continue。我知道這個要求有點奇怪,但這就是我最想要的功能:-)
對于C#,我希望它能結合更多F#好的想法,特別希望能引入F#中的不可空性。
InfoQ:Microsoft的開源調整已經進行了一年多了。它對于.NET社區產生了什么影響或是改變?
Richard Lander:.NET的開源調整從2008年發布ASP.NET MVC源代碼就開始了,然后開源了Web API和SignalR,到2015年開源完整的.NET Core。到現在為止,超過50%.NET Core的更改來自社區,C# repos的數量每天也在GitHub上增長。和過去相比發生了翻天覆地的變化,并為未來繪制了錦繡的藍圖。
作為開源的維護者,我們在努力做著偉大的工作。我們在幾個方面進行了突破:歡迎新加入的人,提供詳細的repo文檔和指導,設置PRs的高門檻,培養社區領導人并幫助運行項目。我們滿足了社區的一些期望,并與社區進行對話,協商他們期望能與眾不同的功能。從總體上來說,我覺得社區對于過去幾年中.NET Core和其他相關開源項目的發展情況是滿意的(在很多情況下是相當滿意的)。
.NET生態系統積極健康的開源平臺項目是非常有利的,它鼓勵更多的人參與到更多的開源項目中來。實際上,它創造的價值是你多年以前難以定論的,但你現在可以非常確定地說.NET是一個開源的生態系統。來自社區、小型企業、大型企業和公眾的反饋非常積極。
Philip Carter:我認為向開源的轉變給.NET社區帶來了巨大的好處。現在.NET社區仍然熱衷于開源,也可能會因為突然的過渡而產生波動,但人們已經看到了其中的價值和貢獻。即使是在不常與開源開發相關的文檔中,我們也看到了全社區參與進來做出的貢獻,我們有近100名非Microsoft的貢獻者。一名社區成員甚至評審了Microsoft員工在我們自己的存儲庫中做出的pull請求!我個人感覺.NET社區已經具備了貢獻于其開發堆棧的能力,這個發現讓我非常激動。當然,這只是開始。當我們在Visual Studio for .NET Standard和.NET Core(這也是開源的)中發布質量工具的時候,期待會有更多.NET開發者能關注進來,并為.NET做出貢獻。
Phil Haack:我可能算的不對,但這個活動已經進行了超過一年了。只是在過去一年中達到了最高峰。社區應該也注意到Microsoft想真正加入到開源社區的堅定決心,可能還需要一段時間才能達到目標。畢竟,MS對開源的排斥遠遠超過一年,但我認為現在的態勢是積極的。.NET社區正在以一種前所未有的方式積極參與到.NET未來的建設中。所有新的.NET Core的開發和語言的設計都是在公共的GitHub上完成的,并接受大家的貢獻,很高興能看到這種態勢。社區的人們參與度越來越高,而不僅僅是做一名配角進行客串表演。
Miguel de Icaza:這讓開源.NET社區和使用.NET的人都感到非常激動。開源框架的好處在于框架是完全開放的,你就可以看到從性能,到內存使用,到提高精確度,到可擴展性等等方面對代碼庫的貢獻。這是一種全面展示的良性循環,因為我們共同建設并培養.NET社區。
結論
.NET的開源已經成為了規劃中的一部分,并預計將繼續發展.NET Core和.NET Standard 2.0。Microsoft致力于發展跨平臺,以吸引非Windows開發人員和平臺實施者。
有關小組成員
Richard Lander是Microsoft .NET團隊首席項目經理。他于2000年畢業于加拿大滑鐵盧大學,獲得英語榮譽學位,在計算機科學和SGML/XML標記語言領域進行了深入學習,后來直接在Microsoft工作。Richard參與了.NET各個方面的工作(他于2003年加入團隊),包括與Windows集成,.NET應用程序模型以及客戶溝通。現在,Richard主要參與.NET Core開源項目,ASP.NET 5的跨平臺.NET以及與其他.NET公司(Xamarin、Unity)的合作。Richard經常在.NET博客和@dotnet推特賬號上發表文章。在業余時間,他喜歡游泳、騎自行車和跑步,并且每年多次參與地方賽。他喜歡80年代英國搖滾和Doctor Who。他在加拿大和新西蘭長大。
Phillip Carter是Microsoft .NET團隊項目經理。他目前主要做F#工具、.NET和.NET文檔。在加入Microsoft之前,Phillip是俄勒岡州立大學的學生,他從事學生開發者導師的工作,并且是移動應用程序開發俱樂部的主席。
Phil Haack是GitHub負責客戶端應用程序的工程總監,這個組包括桌面、基元、電子、編輯器工具團隊。Haack于2011年加入GitHub,是.NET社區的杰出成員。在加入GitHub之前,Phil是Microsoft的程序經理。他的團隊開發NuGet和ASP.NET。
Miguel de Icaza是Microsoft杰出工程師,他的團隊負責創建令人愉悅的開發工具。他與Nat Friedman共同在1999年創建了Ximian,并在2011年創建了Xamarin。在此之前,Miguel于1997年共同創建了GNOME項目,并自2001年創立以來一直負責Mono項目,包括Novell的多個Mono版本。Miguel于1999年獲得了免費軟件基金會發布的免費軟件獎,以及MIT技術評審創新者獎,并在2000年9月被提名為時代雜志評選的100名新世紀的創新者之一。
原文地址:http://www.infoq.com/cn/articles/virtual-panel-dotnet-future
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的虚拟研讨会:.NET的未来在哪里?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio 2017 R
- 下一篇: CoreCLR源码探索(三) GC内存分