This week in .NET 17.11.2023

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. Всем высокой производительности!

Report Page