Microsoft пообещала кардинальную перезагрузку своей платформы. Так как они это сделали?

В год, полный неожиданных сбоев, вас могут простить, если вы пропустили важную веху Microsoft. Но вот они - по состоянию на 10 ноября .NET 5 является официальным релизом, заменяя как .NET Core, так и .NET Framework.

Как мы объясняли в прошлом году, .NET 5 - это не просто набор новых функций. Это результат серьезных усилий по переносу .NET на кроссплатформенную архитектуру с открытым исходным кодом. По сути, это миссия - перестроить .NET, не отвлекая разработчиков, которые в настоящее время полагаются на нее для создания зрелых развернутых приложений. Это изменение сопряжено с риском. Фактически, это немного похоже на замену колес на гоночном автомобиле, когда он едет по трассе.

Работа началась шесть лет назад, когда Microsoft удивила большую часть мира кроссплатформенным .NET Core. В зависимости от вашей точки зрения, .NET Core представлял собой либо появляющуюся альтернативу .NET, либо странную теневую клонированную версию фреймворка со своими собственными соглашениями и головными болями.

Затем .NET Core поглотил всю структуру. Или, по крайней мере, у него были челюсти вокруг головы - до прошлого года было еще слишком рано говорить, удастся ли ему переварить всю пищу. (Каждый, кто работал над чрезмерно амбициозным программным проектом, осознает момент, когда вы зашли так далеко в серьезном изменении, от которого уже не можете отказаться, но вы только что осознали, что нет возможности завершить работу вовремя и все его обещания нетронуты.)

Итак, теперь, когда .NET 5 является официальным выпуском, каков вердикт? Выполнила ли она свою цель? И мешают ли его невыполненные обещания - а их было несколько - успех?

Кроссплатформенное обещание

Основная цель .NET 5 - стать универсальной версией .NET, которая работает для всех современных типов приложений и заменяет как .NET Framework, так и .NET Core. И в этом смысле .NET 5 дает хорошие результаты.

.NET 5 поддерживает все типы проектов, которые он намерен поддерживать, без настоящих звездочек. Вы можете создать полный набор приложений ASP.NET (страницы Razor, приложения Blazor и службы веб-API). То же самое и со стороны настольных компьютеров с поддержкой приложений Windows, которые включают Windows Forms и WPF. (Очевидно, что все эти приложения полагаются на операционную систему Windows. Несмотря на кроссплатформенные возможности .NET, вы не можете запускать или разрабатывать их в разных операционных системах.)

Ограничения обещания .NET также не изменились. Например, есть некоторые устаревшие технологии, которых нет в .NET 5, в том числе:

  • Веб-формы ASP.NET
  • WCF (Фонд связи Windows)
  • WF (Windows Workflow Foundation)

Некоторые разработчики по понятным причинам недовольны этими изменениями, но здесь нет никаких сюрпризов - ни одна из этих технологий никогда не входила в дорожную карту .NET 5. Если вам по-прежнему требуется поддержка приложений, которые их используют, вы, вероятно, продолжите использовать последнюю версию .NET Framework (4.8). Если вы более амбициозны, есть проекты сообщества, пытающиеся исправить пробелы в WCF и WF.

Blazor и C # в браузере

Нет ничего более захватывающего, чем новые технологии, и за последний год в экосистеме разработчиков Microsoft не было ничего новее и амбициознее, чем Blazor WebAssembly, оптимизированная среда выполнения, которая позволяет запускать код C # в веб-браузере.

Официально Blazor выпустила свой первый выпуск в .NET Core 3.1, но .NET 5 дает ему шанс охватить более широкую аудиторию, включая множество разработчиков, которые все еще задаются вопросом, достаточно ли стабильна платформа для того, чтобы начать изучение. Ответ - да - с некоторыми оговорками.

Blazor определенно эволюционировал дальше той точки, с которой он начинался, как эксперимент по проверке концепции. Но он все же больше и тяжелее, чем фреймворки на чистом JavaScript, такие как React и Vue. А модель приложения, которая во многом повторяет ASP.NET Razor, для одних удобна, а для других раздражает, особенно для тех, кто еще не знаком с ASP.NET.

Между прочим, был ряд серьезных улучшений Blazor, которые, как надеялись разработчики, позволят сократить .NET 5. Большинство этого не сделали. Мы получили ленивую загрузку и изоляцию CSS. Но если вы ждали одну из этих функций, приготовьтесь разочароваться:

  • Компиляция с опережением времени (AoT), которая должна сделать приложения Blazor намного быстрее, хотя для этого может потребоваться загрузка большего объема.
  • Настоящая многопоточность, которая зависит от поддержки браузером по-прежнему неравномерно.
  • Горячая перезагрузка, которая запускает автоматическую перекомпиляцию при внесении изменений и плавно переключает на новую версию без перезапуска приложения.

Все эти функции все еще используются, и многие из них, вероятно, появятся в .NET 6. Вопрос о том, является ли Blazor лучшим способом использовать преимущества WebAssembly в браузере и насколько ярким будет его будущее, все еще остается предметом споров.

См. также:

Гармонизация разработки для настольных ПК

Microsoft известна тем, что изобретает колесо - за исключением того, что вместо колеса думают «настольный API». Каким-то образом в мире, где ценится единая кодовая база и универсальные языки, такие как JavaScript, Microsoft в конечном итоге одновременно поддерживает три различных модели разработки для настольных компьютеров Windows:

  • Windows Forms
  • WPF (Windows Presentation Foundation)
  • UWP (по иронии судьбы универсальная платформа Windows)

Хотя до сих пор нет никаких признаков единой технологии, которая могла бы заменить их все, Microsoft пытается разрушить некоторые из стен, разделяющих их. Они запустили Project Reunion, инициативу, которая позволит приложениям Windows Forms и WPF использовать биты FluentUI из UWP. Что еще более интересно, существует вероятность того, что они будут поддерживать не только Windows 10, но и даже Windows 8.1.

Первоначально функции Project Reunion были запланированы для .NET 5, но они упустили из виду. В настоящее время они являются частью библиотеки WinUI 3, которая находится в подвешенном состоянии.

См. также: более подробный взгляд на то, что в конечном итоге будет в Project Reunion.

Слияние мобильных и настольных ПК

.NET 5 - это выпуск, который объединяет все в одну большую палатку разработчиков. Это включает в себя технологию Xamarin, используемую для собственных мобильных приложений.

Но вот в чем загвоздка. Xamarin не просто использовал уменьшенную среду выполнения .NET, он также использовал другую модель пользовательского интерфейса - основанную на XAML, на которую повлиял WPF, но все же полностью свою собственную. Другими словами, Xamarin - еще один неудобный островок. Он не взаимодействует с Blazor в Интернете или с какими-либо инструментами Windows на рабочем столе.

У Microsoft тоже было решение под названием .NET MAUI (для пользовательского интерфейса многоплатформенных приложений). Это эволюция Xamarin, которая позволяет ориентироваться на мобильные платформы Android и iOS, и настольные приложения Windows (WPF или UWP), при этом все волшебным образом объединено в один проект. Он может даже интегрироваться с миром стандартных веб-приложений через Blazor.

Какое-то время Microsoft обещала, что это амбициозное изменение произойдет вовремя для .NET 5, но в конечном итоге оно соскользнуло с .NET 6. (Они специально обвинили коронавирус в задержке, если вы ищете еще одну причину ненавидеть 2020 год. .)

Суть в том, что вы надеетесь на более простой способ создания собственных приложений на различных платформах, вы застряли в ожидании. Или вы можете рассмотреть сторонний инструмент, такой как превосходная Uno Platform.

См. также: более подробный взгляд на .NET MAUI.

Однофайловые приложения

Под заголовком «приятные мелочи, которые на самом деле намного сложнее, чем кажется», Microsoft уже довольно долгое время пытается предоставить истинное решение для однофайлового развертывания. В .NET 5 им это не удалось.

Цель однофайлового развертывания - упаковать приложение и все его зависимости в один исполняемый файл. Когда вы запускаете файл, среда выполнения распаковывает ресурсы и загружает их динамически. Все просто, правда? Не так быстро.

Оказывается, есть соображения по поводу операционной системы и безопасности, которые усложняют картину. Решение, на которое остановилась Microsoft, создает настоящий однофайловый пакет, который безупречно работает в Linux. Но на компьютерах с Windows и macOS вам все равно нужно включить несколько отдельных файлов среды выполнения и распространить их вместе с однофайловым исполняемым файлом. Microsoft объясняет причины этого болезненного компромисса здесь и планирует вернуться к этой проблеме еще раз в .NET 6, без каких-либо гарантий, что ситуация улучшится.

C # 9 стал функциональным

Как всегда, .NET 5 также включает обновленные версии своих основных языков, C # 9 и F # 5. Изменения в C # не так драматичны, как в некоторых предыдущих версиях (помните введение универсальных шаблонов и LINQ). »?). Но они по-прежнему значительны.

Наиболее заметные изменения показывают, что C # приближается к функциональному программированию с новой функцией для неизменяемых объектов данных и более мощным синтаксисом выражений.

См. также: Функциональное программирование Изменения в C # 9.

VB теряет актуальность

В течение многих лет мы наблюдали, как C # набирает силу. И теперь .NET 5 делает это явным - есть только один основной, универсальный язык .NET, и это C #.

На втором месте? Вы должны иметь в виду красиво созданный, но очень нишевый F #, язык, специально разработанный для функционального программирования. Его наиболее важным вкладом может быть то, что он продолжает подталкивать C # к добавлению дополнительных функциональных возможностей.

Что касается VB, который когда-то был самым популярным в мире языком для любителей и одновременно равным C #, то теперь он не более чем наследие. Вы можете использовать VB с некоторыми более старыми типами проектов, в первую очередь с Windows Forms и WPF. (Это улучшение по сравнению с отсутствующей поддержкой, предлагаемой в самой последней версии .NET Core.) Но ASP.NET? Нет, если вам нужна поддержка проекта и дизайнеры Visual Studio. Фактически, ASP.NET поддерживает F # в большей степени, чем VB, а C # остается явным фаворитом по всем направлениям.

Вот удобная таблица, в которой резюмируется поддержка проекта, которую вы получаете из коробки в .NET 5:

Это изменение не так уж и плохо. Наличие дополнительных языков разделяет экосистему разработчиков, и нет смысла поощрять разработчиков писать код на VB, если документация, примеры и сообщества .NET говорят на C #. Но это все еще печальный конец для одного из самых влиятельных языков мира.

.NET каждый год?

Возможно, самый большой успех .NET 5 заключается в том, что он был запущен точно в срок. Год назад дата его выпуска была назначена на ноябрь 2020 года, а двоичные файлы выпадали на десять дней в месяц.

Это важно, потому что ноябрь скоро станет гораздо более важным для разработчиков .NET. Microsoft дала долгосрочное обязательство выпускать новую версию .NET каждый год в ноябре. Вот текущий план выпуска:

По терминологии Microsoft, .NET 5 является текущим выпуском, что означает, что он получает ограниченный срок поддержки, который закончится через несколько месяцев после дебюта .NET 6 в следующем году. Это не похоже на выпуски Microsoft LTS, для которых гарантированное окно поддержки составляет 3 года. Последняя версия .NET Core (3.1) является выпуском LTS, и следующая версия .NET (6) также будет такой. Так что, если вы работаете в правительственной организации или крупной компании, которая нуждается в более строгой политике поддержки, возможно, сейчас самое время планировать использование .NET 5, но не время для развертывания.

В конце концов, самая захватывающая часть .NET 5 - это не такие новые технологии, как Blazor, или его кроссплатформенная поддержка, и даже не его статус открытого исходного кода. Дело в том, что Microsoft успешно выполнила критическую перезагрузку. Они заменили стареющую .NET Framework, возродили семейство .NET и почти гарантировали, что их инструменты программирования будут процветать еще десятилетие.

Если вам понравился этот отчет, вы можете подписаться на ежемесячную информационную рассылку Young Coder.