Microsoft опубликовал открытую платформу .NET 9.0

Компания Microsoft представила выпуск открытой платформы .NET 9, созданной благодаря унификации продуктов .NET Framework, .NET Core и Mono. На основе .NET 9 можно создавать многоплатформенные приложения для браузера, облачных систем, рабочего стола, IoT-устройств и мобильных платформ, используя единые библиотеки и общий процесс сборки, не зависящий от типа приложения. Сборки .NET SDK 9, .NET Runtime 9 и ASP.NET Core Runtime 9 сформированы для Linux, macOS и Windows. .NET Desktop Runtime 9 поставляется только для Windows. Связанные с проектом наработки распространяются под лицензией MIT.

В состав .NET входит Runtime с JIT-компилятором RyuJIT, спецификации API, библиотеки WPF, Windows Forms, WinUI и Entity Framework, интерфейс командной строки dotnet, а также инструменты для разработки микросервисов, библиотек, серверных, графических и консольных приложений. Отдельно поставляются стек для разработки web-приложений ASP.NET Core 9.0, ORM-прослойка Entity Framework Core 9.0 (драйверы имеются, в том числе, для SQLite и PostgreSQL), библиотека WPF 9 (Windows Presentation Foundation), фреймворк Windows Forms 9 для разработки GUI, платформа Aspire 9 для создания приложений Cloud Native, фреймворк MAUI 9 для разработки многоплатформенных интерфейсов пользователя, а также выпуски языков C# 13 и F# 9. Поддержка .NET 9.0 и C# 13 включена в свободный редактор кода Visual Studio Code.

Особенности нового выпуска:

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

    В JIT-компилятор добавлены новые оптимизации на основе профилирования (PGO), улучшены обработка циклов, inline-развёртывание и проверка границ. В .NET runtime расширено использование векторных инструкций и добавлена поддержка расширений Arm64 SVE и Intel AVX10. На 50% ускорен код для обработки исключений. Для кода с операциями приведения типов, таких как “(IFoo)myFoo” и “myFoo is IFoo”, зафиксировано увеличение производительности до 70%. Производительность некоторых методов в языке обработки запросов LINQ (Language-Integrated Query), таких как Take и DefaultIfEmpty, возросла до 10 раз при работе с пустыми массивами и коллекциями.

    Значительно повышена производительность и эффективность метода System.Text.Json. В методе JsonProperty.WriteTo реализована возможность прямой записи строк UTF8, исключающая лишнее выделение памяти. Оптимизированы операции изменения размера JsonObject. При проведении тестов TechEmpower, оценивающих эффективность кода для обработки JSON-запросов, по сравнению с .NET 8 наблюдается увеличение производительности на 15% и снижение потребления памяти на 93%.

  • В Runtime предложена новая модель атрибутов для активации и урезания функциональности в библиотеках.
  • В языке C# 13 расширены возможности использования модификатора “params”, в котором помимо массивов разрешено указание коллекций. При инициализации массивов в значении индекса разрешено использование оператора “^” для отчёта индекса с конца массива (например, “buffer = { [^1] = 0, [^2] = 1,….}” запишет 0 в последний элемент, а 1 в предпоследний). В итераторах и async-методах разрешено использование выражений ref и unsafe. Добавлена новая escape-последовательность “e”. Разрешено определение интерфейсов для типов “ref struct” и использование типов “ref struct” в качестве аргументов в обобщённых функциях. Предложен новый тип Lock для установки блокировок в многопоточных приложениях. Lock myLock = new(); void Concat(params List items) { lock (myLock) Console.WriteLine(string.Join(“e[1mItem: e[0m”, items)); }
  • В языке F# 9 появилась поддержка типов, которые могут принимать значение null. В объединениях реализованы автоматически генерируемые свойства “.Is*” (например, person.contact.IsEmail), которые можно использовать для проверки принадлежности значения множеству. Добавлена поддержка пустых вычисляемых выражений (“let xs = seq { }”). В директивах, начинающихся с символа “#”, разрешено указание нестроковых значений (например, можно писать #nowarn 0070 вместо #nowarn “0070”). В модули List, Array и Seq добавлены функции для случайного выбора или перемешивания элементов. К спискам (list и set) разрешено применение операций с коллекциями.
  • Расширены возможности стека .NET Aspire, предоставляющего набор компонентов для создания приложений, запускаемых в облачных окружениях. Добавлены новые возможности для управления ресурсами и жизненным циклом приложений. Расширены средства для сбора телеметрии.
  • Предложен новый набор абстракций C# для разработки AI-приложений, использования больших языковых моделей, обращения к векторным хранилищам и взаимодействия с AI-сервисами. Представлен новый тип “Tensor” и
    коллекция методов для вычислений и манипуляции с многомерными данными.
    Дополнения для AI распространяются в форме пакетов System.Numerics.Tensors, Microsoft.Extensions.AI и Microsoft.Extensions.VectorData. Обновлён фреймворк ML.NET, предназначенный для интеграции моделей машинного обучения в приложения. Добавлена библиотека Microsoft.ML.Tokenizers для кодирования и декодирования текста в токены.
  • В стеке для разработки web-приложений ASP.NET Core расширена поддержка упреждающей компиляции (ahead-of-time), расширены возможности мониторинга и трассировки, сокращено время запуска и снижено потребление памяти, оптимизирована работа со статическими файлами. Добавлен новый API для аутентификации и авторизации. В Blazor, платформе для создания web-приложений на языке C#, реализованы новые шаблоны для гибридных и web-приложений.
  • Расширены возможности фреймворка MAUI для разработки многоплатформенных интерфейсов пользователя. Проведена оптимизация производительности. Усилена интеграция с настольными и мобильными приложениями. Добавлены новые элементы интерфейса TitleBar и HybridWebView.
  • В WPF (Windows Presentation Foundation) расширена поддержка тем оформления и добавлена поддержка акцентных цветов.

Release. Ссылка here.