This week in .NET 17.11.2023
Dmitriy Firstov📲 Новости
На этой неделе проходила конференция .NET Conf 2023, поэтому неделя богата на новости.
.NET 8
Начнём с главного. Выпущен .NET 8, в котором (как обычно) улучшена производительность, стабильность и безопасность, а также добавлено много всего нового — о некоторых нововведениях см. ниже. Это LTS, поддержка продлится до 10 ноября 2026 года. Когда будете обновляться, обратите внимание на breaking changes.
C# 12 и F# 8
Новый C# (как обычно) упрощает код и помогает сделать его быстрее. Завезли новые выражения для инициализации коллекций, основные конструкторы для классов и структур, псевдонимы для любых типов данных, значения по умолчанию для параметров лямбда-выражений, ref readonly и inline arrays.
Новый F# (внезапно!) упрощает код и помогает сделать его быстрее. Добавлены сокращения для атомарных лямбда-выражений, улучшенные with и while, новые возможности для интерполяции строк, статические члены в интерфейсах и многое другое.
MAUI
В новом .NET вышла новая мажорная версия MAUI, в которой исправлена куча багов, улучшена поддержка мыши и клавиатуры, а также повышена производительность и снижено потребление памяти (как обычно).
ASP.NET Core
Вышла и новая версия ASP.NET Core, в которой (вы не поверите!) улучшена производительность, добавлено много нового в Blazor, новые Identity API endpoints, anti-forgery middleware, stateful reconnect в SignalR, регистрация множества реализаций одного сервиса в DI с распознаванием их по уникальному ключу, новые виды метрик и многое другое.
Entity Framework Core
В анонсе новой версии Entity Framework Core не говорят о повышении производительности (😨), но описывают множество интересных доработок: механизм complex types, который поможет в реализации паттерна value object; встроенная поддержка сериализации коллекций в JSON и улучшение маппинга JSON-столбцов; поддержка HierarchyId для Azure SQL и SQL Server; использование типов без маппинга в качестве возвращаемых значений в методах SqlQuery и SqlQueryRaw.
.NET Aspire
Представлен новый инструмент для создания cloud-native приложений — .NET Aspire (🤩). Инструмент должен упростить настройку мониторинга, service discovery и развёртывания приложений в облаке. Пока это preview-версия, полноценный релиз ожидается весной следующего года.
.NET 7, .NET 6, .NET Framework
Конечно, Microsoft не забывает и о старых версиях: вышли обновления безопасности для .NET 7, .NET 6 и даже для .NET Framework (live long and prosper).
🖋️ Статьи
«Fakes are Test Doubles with contracts» — пример тестирования кода с использованием тестовых фейков, которые реализуют зависимость тестируемой системы, при этом исключая неважные для тестирования аспекты.
«CC golf» — забавная игра с самим собой: переписать код, снизив его цикломатическую сложность. В некоторых случаях это может улучшить код, в других — нет, но упражнение всё равно интересное.
«Automating Memory Profiling with the JetBrains dotMemory Profiler API» — краткое введение в профилирование памяти с помощью dotMemory. Показано, как управлять профилированием через API, что позволяет получить более точные и повторяемые результаты по сравнению с управлением через UI.
«What are Business Rules? It’s not this» — простое объяснение, чем (по мнению автора) бизнес-правила отличаются от обычной валидации, с примером рефакторинга кода.
«DBSCAN Data Clustering from Scratch Using C#» — статья для тех, кто давно хотел научиться делать кластеризацию данных на C#, но не хотел задавать количество кластеров, на которые данные должны разбиваться.
🔹 PR & Issues
Оптимизация FrozenDictionary со строковыми ключами. Сейчас FrozenDictionary для некоторых ключей работает медленнее обычного Dictionary. В PR предлагается стратегия выбора размера бакетов на основе бинарного дерева поиска.
Исправление ошибки анализатора одинаковых путей в контроллере. Сейчас статический анализатор не учитывает то, что «[action]» в пути заменяется названием метода, из-за чего выдаёт ложноположительные результаты.
Исправление ошибки анализатора одинаковых путей при использовании switch. Похожая проблема — при маппинге путей в различных ветках кода анализатор считает пути одинаковыми.
P. S. Всем высокой производительности!