.Net .Net 5 mono Xamarin .Net Framework .Net Core Blazor Uno

跨平台新視界:.Net 5

胡啟明 Michael Hu 2020/12/14 01:11:13
2820

一.  .Net Framework

.Net平台的發展要從2000年左右說起,當時Java(1996年發佈JDK1.0)挾著跨平台宣言[Code once, run everywhere]以及比C/C++更容易入門但卻比Visual Basic/Delphi等當紅高階語言強大許多的優勢成功橫掃軟體開發市場,一直到現在Java都還是受歡迎程式語言的前幾名(甚至是第一名)

為了與Java抗衡,微軟開發了自己的跨平台框架.Net Framework並在2002年釋出1.0版,主要使用語言為C#,號稱擁有比Java更先進的語法而且預設支援當紅的XML技術,和Java一樣號稱[Code once, run everywhere]

.Net Framework一推出即受到很多軟體開發人員的青睞,並與Java打得難分難解,其聲勢甚至一度超越Java,無奈之後Open Source潮流興起,主打不用錢的Linux平台越來越受歡迎,而一開始就和Linux完美結合的Java也跟著水漲船高,加上之後手機平台興起,Java挾著Android平台再度翻紅,成為年度最受歡迎程式語言的常勝軍。

.Net Framework則因為始終無法真正實現跨平台宣言,充其量只能算跨Windows平台而己,又AndroidLinux平台的興起,使跨平台成為Java的強項並成為.Net的弱項,加上Windows系統要錢,因而始終無法更上一層樓成為更受歡迎的平台/語言。

二.  .Net Core

隨著Open SourceAndroid的席捲全球,微軟也不得不從反開源的態勢翻轉並積極加入開源陣營,自Satya Nadella 2014擔任微軟CEO開始,微軟便大力擁抱開源,同時成立.NET Foundation主導開源相關事宜,其中最重要的便是.Net Core=>將新一代.Net Formework開源。

.Net Core 1.02016年正式釋出,除了Open Source之外還可以跨平台於Windows/Linux/MacOS執行,除此之外,有用到的套件才會加入專案的輕量級Framework模式以及至少10倍以上的效能加強,都讓.Net Core一推出便成為.Net平台開發人員的首選,而.Net Framework則於2010年推出4.0之後,2019推出的4.8成了最後一個版本。

接著.Net Core 2.02017年推出,3.0則於2019年推出,每一次的更版都加入了許多好用的功能以及效能上的提升,以Asp.Net Core而言,目前在techempower.comPlainText分類中排行第三,且與第一名無勝差。

參考:https://www.techempower.com/benchmarks/#section=test&runid=8ca46892-e46c-4088-9443-05722ad6f7fb&hw=ph&test=plaintext&a=2

而Asp.Net Core 5.0在Micro Service方面也有顯著的效能提升,以gRPC而言,其效能己超越GO、C++以及Java僅次於Rust:

另外在跨平台上面也支援越來越多的平台,例如更多不同的Linux OS,讓.Net在跨平台這件事漸漸的與Java拉近距離,以最新版的.Net 5.0而言,目前支援的平台就有10幾種,詳細內容請參考https://github.com/dotnet/core/blob/master/release-notes/5.0/5.0-supported-os.md

三.  Xamarin

剛講過,從.Net Framework開始,.Net就無法真正跨平台,但其實有另外一股力量正為.Net的跨平台而努力,那就是monomono2004年釋出1.0版之後,就成為真正的.Net跨平台代名詞,早期mono致力於.NetLinux平台,在手機平台興起之後mono更將跨平台延伸至IOS/Android/Windows phone,一開始mono的手機平台名為MonoTouch/Mono for Android,到了2013年統一更名為Xamarin,並漸漸成為.Net人員開發跨平台APP的首選。

Xamarin挾著跨主流手機平台的優勢,讓開發者可以節省一半以上的時間/精力開發所有平台的APP,此外Xamarin 還為開發者在雲端提供了行動應用性能檢測服務,因此越來越受歡迎,到了2016年,Xamarin的客戶己超過15,000位,其中包括可口可樂、JetBlue 這樣的世界 500 強公司,而.Net平台一直想朝跨所有平台的方向前進,而手機平台正是當時.Net所欠缺的,為了完成跨平台的最後一塊拼圖,微軟於2016年併購了Xamarin並積極與.Net整合,將跨平台的野望往前推進了一大步。

四.  .Net 5

2019年微軟宣告.Net Core 3.0的下一版為.Net 5(Core不見了),並將.Net 5定位為.Net Core vNext,就像當初.Net Core 1.0被定位為.Net Framework vNext一樣。在.Net 5之前.Net平台有兩個主要的Runtime,一個是Mono,提供跨平台手機APP執行環境,另外CoreCLR則支援雲端應用以及桌面應用程式。而.Net 5的目標為unified .NET platform,也就是說用同一種語言、同一種套件進行開發,並用同一種編譯器進行編譯,再交由同一個Runtime執行。

但由於新冠肺炎的關係,.Net unification計畫延遲了,真正的unified .NET platform預計要在2021/11推出的.Net 6才會被實現,到時候monoCoreCLR將會被整合在一起:

五.  Blazor

.Net中我們可以用Xamarin開發跨手機平台APP,可以用Asp.Net Core開發跨Windows/Linux/MacOS 雲端應用,可以用Windows Form/UWP開發桌面應用,但Web前端應用呢?WebAssembly呢?

.Net Core 3.0之前,若要開發Web前端應用,一定要配合前端語言/框架,例如以Asp.Net Core MVC配合Javascript/JQuery開發monolithic Web系統,或是以純前端框架Vue/React/Angular開發SPA應用。

隨著WebAssembly的興起,微軟也開發了自身的WebAssembly框架BlazorBlazor類似VueSPA框架用來開發前端SPA應用,不同的是Blazor使用C#為語法,搭配Asp.Net MVC開發人員所熟悉的Razor進行Web前端應用開發,又是以WebAssembly為執行環境,因此效能預期會比Javascript來的好。

六.  Uno

到了Blazor時代,.Net己提供所有類型應用的開發能力,但還是有一個問題,就是無法用單一工具/框架開發所有跨平台應用,當我們想開發APP時必須用Xamarin,想開發Web前端則要用Blazor,此時Uno(https://platform.uno/)來了。

Uno基本上不算是.Net平台中的內建應用,與mono初期一樣,這是一個Open Source專案,Uno的出現讓.Net開發人員真的可以用同一種語言、同一種框架/工具來開發所有類型的應用,如同Uno在自家首頁中的宣示:

Uno is "The only platform for building native mobile, desktop and WebAssembly apps with C#, XAML from a single codebase. Open source and professionally supported."

我們可以透過UnoC#+XAML來開發跨平台APP、桌面應用程式以及WebAssembly SPA

 

除了強大的跨平台功能之外,Uno也解決了Xamarin.Forms For Android效能的問題,透過Uno建置的Android APP效能比Xamarin.Forms For Android要快上許多,己接近Java/Kotlin的水準了。

值得一提的是Blazor團隊於2020/1/14也發表了Mobile Blazor Bindings這個專案,目的是透過C#+Razor來開發跨平台APP(https://devblogs.microsoft.com/aspnet/mobile-blazor-bindings-experiment/),沒想到Uno在兩天後(2020/1/16)即發表了Blazor-Xamarin.Forms-UWP-Uno-WebAssembly uber-stack,可以透過UnoBlazor Native(Mobile Blazor Bindings)轉譯為WebAssembly,讓.Net平台又多了一種開發跨平台專案的方式:

七.  結論

.Net平台是我個人最喜愛的平台,吸引我的原因在於便利的開發環境(Visual Studio搞定一切)、先進的語法、優越的效能與跨平台能力,自2020/11/10推出.Net 5之後,不管是在效能、語法、安全性、DevOps的支援以及跨平台的能力...等又再往前邁進一大步。

雖然離unified .NET platform還差一小步,但明年推出的.Net 6就會真正實現.Net2002年剛推出時所宣示的願景[Code once, run everywhere],讓軟體工程師能輕鬆而有效率的開發跨平台應用程式,而自.Net Core 3開始,微軟將會每年釋出一版新的.Net,如下圖所示:

這也代表.Net平台將會是一個穏定更新且長期支援的超級平台,真的值得我們持續觀注與投資。

胡啟明 Michael Hu