.NET 5.0 je tady. Jedná se o nástupce rozhraní .NET Framework 4.8 a .NET Core 3.1. To znamená, že konzolové aplikace, model Windows Forms a aplikace WPF je nyní možné zabalit do vlastního běhového prostředí. I když bylo vždy možné vložit instalační program .NET Runtime do samotného instalačního programu aplikace, nový přístup znamená, že více aplikací se nesdílí, a proto nejsou závislé na jednom modulu runtime .NET. Můžete vyvíjet na nejnovějších kouscích, aniž byste ovlivnili ostatní. Důsledky jsou obrovské.
Jiný přístup
Když nový hardware umožňoval nové funkce, musela je podporovat nová verze Windows, a proto to vyžadovaly nové aplikace. Požadavky na nové aplikace zvýšily prodeje nového hardwaru, což automaticky zvýšilo prodeje Windows. Původní obchodní model Windows byl jednoduchý: Windows byl operační systém a knihovna základních tříd (BCL) v jednom balíčku.
.NET Framework tento obchodní model ohrozil. Jednalo se o základ, který umožňoval aplikacím běžet v mnoha verzích Windows, takže nový hardware již nebyl tolik potřeba. Dokonce i nejnovější .NET Framework 4.8 podporuje Windows 7 SP1, a pokud zůstanete u .NET Framework 4.0, můžete běžet na Windows XP. Všechny knihovny, které vaše aplikace potřebuje, již nejsou součástí systému Windows (vývojáři je nemají povoleno dále distribuovat), ale místo toho existují jako balíčky NuGet (které jsou určeny k redistribuovatelnosti). Jedinou závislostí je GUI, ale Chromely/Blazor, Uno Platform a MAUI mají potenciál jej nahradit.
Starý obchodní model Windows již nebyl udržitelný. Posledním pokusem byl Windows Runtime, což byl port .NET Runtime s jiným garbage collectorem (pravděpodobně na základě počítání odkazů) a kompilací AOT (v Microsoft Store). Nový obchodní model Windows jako služby je mnohem kompatibilnější se samotným .NET. Dalším důvodem pro operační systém jako službu je zoufalá potřeba co nejnovější verze všeho, co souvisí se síťovou komunikací. Zabezpečení je tak těžké.
Uprostřed dlouhého běhu
.NET 5.0 není konečný nápad. Ve skutečnosti je to někde uprostřed toho, čeho se Microsoft snaží dosáhnout. Vývojáři v následujících oblastech mají štěstí:
- Konzolové aplikace
- Služby systému Windows
- Formulářové soubory Windows
- WPF
- ASP.NET
- ASP.NET Jádro
Na druhou stranu vývojáři v těchto oblastech mají zatím smůlu:
- Upřímně řečeno,
- Xamarin.Forms
- Xamarin.Android
- Xamarin.iOS
- Xamarin.Mac
- Xamarin.tvOS
Očekával jsem to z důvodů, které popíšu níže, ale mnoho vývojářů neví , zda se o ně Microsoft stále stará, nebo je nechává za sebou.
Z technického hlediska máme k dispozici toto:
- implementace BCL pro Windows API,
- Běhové prostředí (RyuJIT) pro x64, x86, ARM a ARM64 (nahrazeno JIT32 za .NET Core 2 a JIT64 za .NET Framework 4.6),
- Kompilace AOT pro win-x86, win-x64, win-arm, osx-x64, linux-x64, linux-arm
A to je to, co nemáme:
- implementace BCL pro iOS, iPadOS, tvOS a Android,
- Kompilace AOT pro ARM64 (která by nahradila .NET Native toolchain v UWP a AOT Mono – win-arm64, ios-arm64, osx-arm64, atd.),
- Integrace Xcode běžící na Apple Silicon.
Je zřejmé, že úzkým hrdlem není runtime, ale různé porty BCL. Historicky má .NET Framework svůj vlastní, Mono má svůj vlastní a UPW má svůj vlastní. To, co začalo jako přenosné knihovny tříd, pokračovalo do .NET Standard a vedlo k .NET 5. Věřím, že Xamarin a .NET 5 se sloučí v milníku .NET 6. Ačkoliv to mělo být hotovo letos, musíme si počkat další rok.
C# 9
Pokud cílíte na rozhraní .NET 5, můžete použít jazyk C# 9. Zde jsou některé z funkcí, které si můžete osvojit.
Záznamy
Záznam je nový typ. Je to jako třída, ale může dědit pouze z jiného záznamu a všichni její členové jsou pouze pro čtení. Na rozdíl od struktur je záznam stále odkazovým typem.
Hodnota null
Odkazové typy s možnou hodnotou null byly funkcí jazyka C# 8. Nic nového zde není, až na to, že celá BCL je nyní anotována pro možnost null.
Kovariantní návraty
Zděděná třída, která přepíše vlastnost, může vrátit specifičtější typ. Je to velmi užitečné. Kdo ví, proč jsme museli čekat tak dlouho?
Budoucnost je jasná
První .NET 6 Alpha SDK, která podporuje macOS ARM64, byla vydána před 2 dny. Ve skutečnosti je Apple Silicon již podporován.
Nejdůležitějším aspektem .NET 5 je, že každá nová verze .NET si nyní může dovolit zavádět zásadní změny. Podpoří to její rozvoj. Problém s předchozím přístupem spočíval v tom, že systémová aktualizace .NET Frameworku ovlivnila všechny aplikace, takže tato aktualizace musela být 100% zpětně kompatibilní. Už to není nutné. Každá aplikace nyní může nést svůj vlastní runtime. Milé. Máte na výběr.
- Publikujte přenosný binární soubor. Vyžaduje běhové prostředí nebo může být zkompilován do nativního kódu.
- Nasaďte aplikaci a její běhové prostředí. Vedle sebe lze nainstalovat více verzí běhového prostředí.
- Zkompilujte aplikaci se všemi závislými knihovnami do nativního kódu. Bude cílit na jednoho dodavatele operačního systému a jednu sadu instrukcí.
Co je lepší pro koho, záleží na tom, co děláte. Knihovníci ocení první volbu. Weboví vývojáři pravděpodobně použijí druhou možnost. Tvůrci desktopových, mobilních a IoT aplikací budou mít prospěch z třetí z nich.
Kaizen – 改善
Microsoft je nejlepší společnost na celém světě… v tom, že děláme věci znovu, znovu a znovu, dokud svět neskončí. To, co jsme si mysleli, že bude .NET 1, bude nakonec .NET 6. Představte si, kde by dnes .NET byl, kdyby všechny investice do Mono, Silverlight, Moonlight, .NET Micro Framework, XNA, DNX, Expression, WP, Xamarin, WinRT a .NET Core původně přispěly k jeho fragmentaci do jednoho silného frameworku.
.NET 5 je prvním krokem ke sjednocení všeho kolem .NET ekosystému do jednoho základu, který se bude pomalu, ale jistě posouvat kupředu. Jediné zlepšení výkonu v běhovém prostředí .NET bude přínosem pro aplikace UPW, zařízení IoT, webové stránky ASP.NET webové stránky nebo aplikace pro iOS. (Totéž bohužel platí i pro chyby.) Všichni vývojáři, kteří se zaměřují na tyto platformy, mohou využívat vylepšení Roslynu. A konečně bude možné získat balíček NuGet bez ohledu na to, který port BCL aktuálně používáte. Když jsem instaloval balíčky NuGet, viděl jsem celou řadu závislých balíčků pro všechny možné profily. Od letošního podzimu nemají jejich nejnovější verze žádné závislosti a cílí pouze na .NET 5. Z pohledu vývojáře knihoven je .NET 5 jen další verzí .NET Standard. To je svět, ve kterém chci žít.
Až se celý ekosystém .NET sjednotí, bude nereálné ho udělat zastaralým a znovu ho budovat od nuly. Jediným možným způsobem by bylo pomalé neustálé zlepšování výkonu, podpory architektury procesorů a cílení na SDK/toolkit/OS.
A mimochodem, protože celý .NET silně závisí na kompilátoru just in time, bylo by užitečné si připomenout, že v průmyslu tuto myšlenku představil Kiichiro Toyoda. Není náhodou, že součástí slavného výrobního systému Toyota je princip Kaizen.