Какво е новото в Microsoft .NET 5

Вторият кандидат за освобождаване на .NET 5 на Microsoft пристигна на 13 октомври, сближавайки .NET Framework и .NET Core с една стъпка по-близо до завършване. Новата унифицирана .NET платформа се очаква за обща наличност на 10 ноември 2020 г. 

Microsoft описва Release Candidate 2 като почти финална версия и последната от двете RC. Първоначалният RC е публикуван на 13 септември. Кандидатът за издание на .NET 5.0 може да бъде изтеглен от dotnet.microsoft.com.

Целите на високо ниво за .NET 5 включват осигуряване на унифицирано .NET SDK изживяване, с един BCL (библиотека от основен клас) във всички приложения .NET 5, както и с поддръжка както на собствени, така и на уеб приложения в множество операционни системи. Един-единствен проект за приложение .NET 5 ще поддържа цели като Windows, Microsoft Duo (Android) и Apple iOS, като използва естествени контроли на тези платформи.

Допълнителните цели на .NET 5 включват поддръжка за изграждане на високопроизводителни облачни приложения, по-бързи алгоритми в BCL, по-добра поддръжка за контейнери по време на изпълнение и поддръжка за HTTP3. .NET 5.0 включва поддръжка за двоичен формат WebAssembly чрез Mono runtime и .NET библиотеки. Представен е и набор от анулиращи анотации от тип референтен тип.

.NET 5 също обещава да позволи на разработчиците автоматично да намират скрити грешки в кода. Други нови функции включват Halfтипа, двоична плаваща запетая, която заема 16 бита, и изрязване на сглобката, което подрязва неизползваните сглобки, за да намали размера на приложенията. Подчертано подстригване също е подчертано. Новото съвпадение на шаблони в C # 9 обхваща релационни, логически и прости типови модели. Опцията за разполагане ClickOnce вече се поддържа за приложенията на .NET 5.0 Windows и приложенията .NET Core 3.1.

Новата .NET платформа също обещава подобрения в производителността. Бюлетин, свързан с Preview 7, който пристигна на 21 юли, признава около 250 заявки за изтегляне, ориентирани към изпълнението в .NET 5 и отбелязва, че се очаква приятна изненада за тези, които са следвали производителността на .NET Core. 

Други допълнения и подобрения, отбелязани в бюлетина на .NET 5 Preview 7:

  • Новият API на System.text.json JSON предоставя възможност за игнориране на стойности по подразбиране за свойства от тип стойност при сериализиране, полезно за намаляване на сериализацията и разходите за кабели. Това е пробивна промяна. Също така за System.text.json е добавена възможността да се справяте с циркулярни препратки при сериализиране, като формата на API сега се очаква да бъде окончателна.
  • Събирането на боклук вече показва подробни данни за най-новото събиране, използвайки GetGCMemoryInfoметода, който връща GCMemoryInfoструктура. GCMemoryInfoобслужва информация за паметта на машината и купчината и най-новата колекция или най-новата колекция от вида GC, посочен - краткотраен, пълен блокиращ или фон. Най-вероятните случаи на използване за този API са регистриране / наблюдение или за индикиране на балансиращ товар, че машината трябва да бъде извадена от ротация, за да поиска пълен GC. Междувременно беше направена друга промяна в GC, за да се отложи скъпата операция за нулиране на паметта към ситуации с ниска памет.
  • Ryujit, генераторът на асемблерен код за .NET, получава подобрения, вариращи от разрешаване на изтриването на някои проверки на граници до подобряване на дублирането на опашката и подобрения за премахване на излишни нулеви inits. Също така в Ryujit са включени ARM64 хардуерни характеристики и оптимизация на API.

.NET 5 Preview 6, издаден на 25 юни, премахна вградената поддръжка за WinRT (Windows Runtime), колекция от API за изграждане на приложения на Universal Windows Platform. Това е пробивна промяна; Приложенията .NET Core 3.x, използващи WinRT, трябва да бъдат прекомпилирани. Екипите на .NET и Windows работят за промяна на начина, по който WinRT работи с Windows, замествайки WinRT поддръжката с инструментариума C # / WinRT в .NET 5. C # / WinRT е пакет от инструменти NuGet, предлагащ поддръжка на WinRT за проектиране на C #.

Други промени в .NET 5 Преглед 6: 

  • SDK на .NET 5 Preview 6 включва поддръжка за Windows Forms на устройства с Windows ARM64. Продължава работата по добавяне на поддръжка за Windows Presentation Foundation на Windows ARM64.
  • Подобренията в качеството на кода на RyuJIT обхващат обработка на структури и оптимизация за премахване на излишни нулеви инициализации. Също така е постигнат напредък в ARM64 оптимизирането на хардуерни характеристики, както и в подобряването на генерирания код за ARM64, с намален размер на кода.
  • Плановете за поддръжка на платформата са актуализирани.

.NET 5 Preview 5, издаден на 10 юни, съдържа следните нови функции:

  • Компилаторът RyuJIT JIT има по-бързо, преносимо изпълнение на помощници на tailcall. JIT иска помощ по време на изпълнение, когато осъзнае, че ще се нуждае от помощник, за да извърши обратно повикване. Също така за RyuJIT е постигнат продължителен напредък в изпълнението на хардуерните присъщи ARM64. Други подобрения в RyuJIT включват по-добра скорост в случай, който засяга компилацията на регулярния израз и подобрена производителност на архитектурата на Intel.
  • Активиран е износът за собствени двоични файлове с повиквания в .NET код. Строителният блок на тази възможност е хостинг поддръжка на API за UnManagedCallersOnlyAttribute. Проектът за местен износ позволява излагане на персонализиран собствен износ. Той не изисква технология за взаимодействие на по-високо ниво като COM и е междуплатформена.
  • DirectoryServices.Protocols поддръжката се разширява до Linux и MacOS.
  • Разпространението на Alpine 3.12 Linux сега се поддържа.

Кандидатът за издание на .NET 5.0 може да бъде изтеглен от dot.net.microsoft.com.

.NET 5 Preview 4, издаден на 19 май, представи следните нови възможности:

  • Поддръжка на езици C # 9 и F # 5.
  • Подобрена производителност на опашките, използвани от F #.
  • Подобрена производителност на ToUpperInvariant, string.ToLowerInvariantи свързаните с модели.
  • Подобрена производителност на HTTP 1.1 и HTTP 2.
  • Подобрен механизъм за преброяване на обажданията.
  • Динамично разширяване на вътрешния родов речник за премахване на скалите за изпълнение, засегнати от родов код.
  • Закачена купчина обект за намаляване на фрагментацията на купчината.
  • Еднофайлови приложения, базирани на нов тип публикуване на един файл, който изпълнява приложение от един двоичен файл.

Подобренията в .NET 5 preview 3, представени на 23 април, включват следното: 

  • Класът BitArray за управление на масив от битови стойности беше актуализиран, за да включва хардуерно ускорено внедряване на ARM64, използващо присъщи ARM64. Подобренията в производителността на BitArray са значителни, каза Microsoft. В допълнение, заместването на стека (OSR) в CLR е внедрено, за да позволи на кода, изпълнен от текущо изпълнявани методи, да бъде променен в средата на изпълнение на метода, докато тези методи са активни „в стека“. Тази възможност за подобряване на характеристиките на ефективността на диференцираната компилация сега е експериментална функция за включване в x64. Друго подобрение за RyuJIT подобрява качеството на кода за конструкции като аргументи при извиквания на позиция „tail call“. RyuJIT също се очаква да предложи по-добро представяне на генеричните лекарства. 
  • Добавянето на поддръжка за запазване на препратки беше добавено към System.Txt.Json, което позволява обработка на референтен цикъл за JSON сериализация. Също така за JsonSerializer се поддържат неизменяеми класове и структури. Също така сега се поддържа обработка на нулева стойност.
  • .NET SDK сега автоматично ще препраща към пакета NETFramework.ReferenceAssemblies NuGet с дадена целева рамка .NET Framework във файл на проекта. Тази промяна позволява изграждането на .NET Framework проекти на машина без инсталиран пакет за насочване на .NET Framework. Това подобрение е специфично за насочване на пакети и не отчита други възможни зависимости от проекта.

Конкретни подобрения в .NET 5 preview 2, издаден на 2 април, включват: 

  • Направени са редица промени в RyuJIT за подобряване на качеството на генерирания машинен код, включително дублиращи се нулеви инициализации, които се елиминират по-агресивно и оптимизирани полета за нулиране, извикани по-рано.
  • Събирането на боклук на сървъра на различни нишки вече може да работи за кражба, докато маркира обекти gen0 / 1, държани на живо от обекти от по-старо поколение. Работата по кражбата на нишки съкращава ефимерните GC паузи за сценарии, при които някои GC нишки отнемаха много повече време, отколкото други. В допълнение е внедрена част от функцията за закачени обекти (POH), частта, вътрешна за събиране на боклука, за да позволи на колекционера да управлява фиксираните обекти поотделно. Това избягва отрицателното въздействие на закрепените предмети върху купчините от поколения.

Преглед 1, пуснат на 16 март, включва подобрения в производителността на регулярните изрази, както и подобрения в качеството на кода в RyuJIT.

Поради излизане в производство през ноември 2020 г., .NET 5 трябва да включва:

  • ASP.NET Core, рамка с отворен код за уеб приложения.
  • Технология за достъп до данни на Entity Framework Core.
  • WinForms.
  • WPF (Windows Presentation Foundation).
  • Модел устройство за мобилно приложение Xamarin.
  • ML.NET.

Microsoft заяви, че .NET 5 ще осигури единна, унифицирана платформа за изграждане на всякакъв вид приложения. Компанията насочва половината от трафика към своя .NET уебсайт към версия .NET 5 като тестов случай, използвайки балансиране на натоварването на Azure. 

Microsoft препоръчва на разработчиците да създават нови приложения с .NET Core 3.1 и след това да ги мигрират към .NET 5. Компанията отбелязва, че приложенията .NET Framework могат да бъдат оставени на .NET Framework, които ще останат поддържани, докато се поддържа самият Windows.