=

Kde můžeme používat C# 9.0

V závěru roku 2020 Microsoft vydal aktualizovanou sadu vývojářských nástrojů, která zahrnuje mimo jiné novou verzi runtime, nové verze frameworků, kompileru i samotného jazyka C# 9.0. Podpora jednotlivých verzí jazyka v různých verzích vývojářského stacku se stala součástí mnoha diskusí a netřeba zdůraznit, že drtivá většina příspěvků je silně zavádějících.

Verzování vývojářského stacku

Hledáte-li osvědčené řešení, jak se z verzování produktů Microsoftu nezbláznit, jednoduše se držte vždy kompletního technologického balíčku, který Microsoft vydává. Plán je takový, že by se tak mělo dít vždy na podzim, zhruba v listopadu. Využitím celé sady nově vydaných nástrojů získáte maximální vzájemnou kompatibilitu. Součástí nové sady nástrojů je obvykle i nová verze jazyka C#. Tu by měl vývojář v ideálním případě používat pouze v novém stacku. S vydáním .NET 5 lze tedy využívat veškeré schopnosti jazyka C# 9.0.

Těžký úděl sí-šarpu

Kód, který vývojář napíše v jazyce C# je nutné kompilovat do MSIL assemblies. Těmto assemblies musí rozumět následně runtime. A i když jim runtime rozumí a umí je provést, ještě pořád je zde riziko, že prováděný kód spadne za běhu ve chvíli, kdy bude chtít pracovat s nějakým specifickým typem, který v určité verzi frameworku chybí.

Příkladem potíží s kompatibilitou jsou drobná vylepšení jazyka (například record types v C# 9.0). Použije-li vývojář tuto funkci, musí mít novou verzi kompileru, který dokáže vygenerovat bez potíží IL kód. Provedení samotného IL kódu už ale zvládne provést i starší verze runtime.

Jako vývojář tedy mohu použít C# 9.0 i v .NET Core 3.1 projektech, avšak s řadou omezení. Stejná situace platila i v případě jazyka C# 8.0 a jeho použití v .NET Core 2.1 projektech, potažmo v NET Standard 2.0 knihovnách.

C# 9.0 nabízí mnoho

Dobrá zpráva je, že jazyk C# 9.0 nabízí mnoho funkcionalit, které nevyžadují novou verzi runtime ani dodatečných typů. Jinými slovy si lze C# 9.0 do velké míry vychutnat i v .NET Core 3.1 aplikacích a lze jej při jisté opatrnosti používat i pro vývoj NuGet balíčků targetovaných na NET Standard 2.1. Zde je však nutná obezřetnost, eventuelně dvojí implementace pro různé TFM. Některé funkcionality vývojář k dispozici nemá a musí se bez nich obejít nebo jim zajistit podporu například skrze NuGet balíčky. Příklad mohou být record types, IAsyncEnumerable, IAsyncDisposable a další.

Přestože C# 9.0 si najde své místo i v .NET Core 3.1 projektech, osobně nevidím důvod otálet s relativně jednoduchým přechodem na verzi .NET 5. Kromě nových funkcionalit jazyka lze získat lepší performance a otevřít si cestu k tzv. "nullable rollout phase". Jeremy Likness konkrétně doporučuje: "Pro minimalizaci dopadu změn doporučuji, abychom rok 2021 považovali za zaváděcí fázi, v rámci které budeme přecházet na nullable reference types. Od listopadu 2021 mohou být projekty v novém normálu s nullable reference types jakožto výchozím nastavením".

Podpora .NET 5 prodloužena až do února 2022

V závěru se hodí zmínit, že Microsoft prodloužil podporu pro .NET 5 až do února 2022. Standardní 3 měsíční support tedy upravil pro aktuální .NET 5 tak, že poběží od vydání příští LTS verze (.NET 6). Změna neobsahuje výjimky a měla by se vztahovat i na aplikace napsané v Blazor WebAssembly. Zda se Blazor WASM dočká příští rok LTS zatím stále není zřejmé.

Miroslav Holec

Miroslav Holec

14. 12. 2020

Tento článek je již velmi zastaralý. Článek nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.

Pomohl článek? Kupte mi kávu!

Kupte mi kávu!


kontakt zde

Dotazy, poptávky a objednávky

mirek@miroslavholec.cz
Loading