Похоже, что локдаун не сильно отразился на компании Microsoft. В этом году открылся рог изобилия и на нас посыпались новинки софтверного рынка - это и долгожданная Windows 11, и новая Visual Studio 22, и, конечно же .NET 6.0. В эти, не самые веселые времена, такие новости действительно радуют.
Давайте поговорим о, пожалуй, самой интересной для разработчиков новинке - .NET 6.0. Не успели разработчики перевести свои проекты на NET 5.0, как уже подоспела новая версия. Забегая вперёд отмечу очевидную правду, что версия 6 не является чем-то принципиально новым - это “допиленный” вариант 5-й. Большая часть изменений - это доработанные или переработанные решения из прошлогоднего релиза, но шестая версия получила статус LTS (Long Time Support) - стала версией с долговременной поддержкой. Отныне это будет касаться всех четных версий.
Как вы помните, начиная с .NET 5.0 компания Microsoft решила объединить все свои фреймворки в один, дабы устранить весь этот "зоопарк". То есть пришли к изначальной концепции .NET Framework, только теперь это не монолит, а только выглядит так.
Изменений и добавлений в NET 6.0 достаточно много, и чтобы статья не превратилась в утомительный трактат, предлагаю кратко рассмотреть основные, наиболее интересные:
Обновленная утилита Crossgen получила вторую версию. Старая технология предварительной компиляции была, прямо скажем, несовершенной и позволяла только генерировать нативный код только для той платформы, на которой была запущена старая утилита crossgen. Сейчас она позволяет запускать JIT компилятор независимо от платформы применяя разные стратегии и оптимизации в зависимости от ситуации.
Это оптимизация компилятора для выставления приоритетов компиляции частей программы. Все дело в том, что далеко не все части программы используются в реальной эксплуатации или используются крайне редко. Например, какие-нибудь экзотические ветвления в else if. Так вот программу можно сделать более оптимизированной, если указать компилятору на часто используемые блоки программы. Теперь есть возможность включить анализатор, который при эксплуатации программы определит часто и редко используемые участки, а также составит профиль оптимизации. Предусмотрено три сценария этой оптимизации:
Эта фича особенно вас порадует. Наконец отладка приложений сильно упрощается! Теперь вы можете запустить отладку один раз и править код "на живую". Если вы когда-нибудь отлаживали javascript в своих .NET Core проектах, то вы поймете принцип сразу.
Наверняка вы помните такую штуку, как "Изменить и продолжить". И раньше у нас была возможность изменить код во время выполнения, но работало это не очень удобно. Приходилось ставить брейкпоинты и приложение вставало на паузу. Брейкпоинт обязательно должен быть установлен до момента, который предполагается исправлять. Да и возможности по изменению были весьма ограничены.
https://docs.microsoft.com/en-us/visualstudio/debugger/supported-code-changes-csharp?view=vs-2019
Теперь мы можем исправить код прямо при выполнении программы во время отладки. Затем сохранить изменения и увидеть их в реальном времени. Это значительно ускоряет отладку программ, особенно если вы знаете что и где нужно исправлять и хотите сразу увидеть результат без перезапуска отладки. И да, теперь это работает и в VS Code. Список доступных изменений не велик и доступен по ссылке.
В рамках глобализации, то есть объединения всех фреймворков в один, Microsoft добавляет в .NET 6 поддержку Xamarin. Теперь нам доступна разработка под macOS, iOS и Android в VisualStudio. Однако в стандартном SDK это не заработает. Потребуется установка дополнительного Optional SDK Workloads. На самом деле разработка становится все удобнее. Создать проект на Android - дело одной команды:
dotnet new android
От названия Xamarin решили отказаться и теперь нам представили Multi-platform App UI или сокращенно MAUI.
Нельзя обойти стороной такой интересный инструмент как Minimal API. Этот фреймворк позволяет обходиться минимальным кодом для создания и доступа к веб-методам. Не нужно создавать всю эту MVC обвязку, настраивать заголовки контроллеров и методов, чтобы выстроить роутинг. Более того, Setup.cs тоже больше не нужен. Достаточно лишь Program.cs в котором вы сразу можете создавать веб-методы с роутингом.
app.MapGet("/", (Func<string>)(() => "Hello World!"));
Неименованная функция вернет "Hello World!" на любой запрос. Это именно то, что так нужно для микросервисов или прототипирования.
Microsoft опубликовали список всех поддерживаемых ОС, а именно:
Поддержка ARM64 появилась еще в NET 5 для Windows. В шестой же версии она расширилась на процессоры ARM64 Apple.
Несмотря на то, что Blazor это фреймворк для браузерных приложений, Microsoft решил сломать шаблон и дать возможность создавать десктоп приложения. Видимо Blazor доказал свою состоятельность.
Перевели Razor-компилятор на Roslyn Source Generators, что значительно ускорило сборку. Roslyn Source Generators появился еще в NET 5 и наделал много “шума” благодаря возможности генерировать код C # на лету во время разработки.
Наш любимый LINQ тоже не оставили без внимания. В каждом выпуске .NET стараются добавить что-то новое в этот язык (особенно в .NET 5) и этот релиз не стал исключением. В LINQ за последние несколько лет улучшили производительность, а также уменьшили дублирование кода. Вот небольшой список полезных "фишек":
Ну, и как же без доработок библиотеки System.Text.JSON. Основные изменения коснулись сериализатора. А именно:
Также очень интересная "фича" - поддержка работы с JSON документом как с DOM. Эта особенность довольно полезна, поскольку часто просто не хочется плодить POCO-объекты для простых операций. Не стоит забывать, что DOM-подход к работе с JSON как бы то не было ведёт к снижению производительности и перерасходу ресурсов. Нас заверяют, что такого не произойдет, но насколько это правда - узнаем на практике.
Протокол обмена данными HTTP существует, наверное, уже вечность. Все прекрасно знают, что он основан на другом протоколе TCP, который существует еще дольше. Да, бурное развитие интернета поставило http в затруднительное положение - на фоне роста пропускных способностей сетей он выглядит слабым звеном. И вот, наконец, до нас дошла третья версия этого замечательного протокола, которая хоть и не сняла проблемы, но существенно понизила их градус.
Новый протокол QUIC, который сменил TCP, работает быстрее в случае потери пакетов. Он быстрее при установке соединения. Он позволяет передавать данные параллельно. И он изначально безопасный благодаря шифрованию запросов.
Появился новый класс - очередь с приоритетом PriorityQueue<TElement,TPriority>. Он позволяет задавать приоритет по каждому добавленному элементу и создает очередь приоритетов. Изымаются эти элементы, начиная с меньшего приоритета.
С датой тоже поработали. Из наиболее интересных изменений:
О новых возможностях 10-й версии нужно писать отдельную статью. Поэтому даже не буду упоминать тут самое интересное. Пока что вы можете ознакомиться с этим списком изменений.
Давайте подведём небольшие итоги - что же нам предлагает .NET 6:
Мы, конечно, же протестировали наши продукты на совместимость с новым фреймворком. FastReport работает на .NET 6 также прекрасно, как и на 5 версии.
От себя можем добавить, что на наш взгляд, вектор консолидации платформ, языков и технологий правильный. Да, технические знания у молодого поколения снижаются, но они уже и не нужны. Также как коробка автомат вытесняет механическую. Людям нужно просто ездить и не задумываться о передачах и оборотах двигателя. Также и многим современным разработчикам не хочется разбираться в технических тонкостях реализации тех или иных процессов. Теперь они могут заниматься только творческим процессом разработки.