Ключевые новые функции и изменения в .NET 8

автор vadim


Приятно иметь предсказуемый цикл выпуска .NET. В прежние времена .NET Framework выпусков было мало, и изменения часто были минимальными. Это было не так уж и плохо, но привязка платформы разработки к циклу выпуска Windows иногда означала годы ожидания обещанных функций.

С переходом на платформу с открытым исходным кодом, сначала с параллельной разработкой .NET Core и базовых классов .NET Standard, а затем с объединением .NET, ситуация изменилась. Теперь мы получаем ежегодный выпуск .NET, привязанный к ноябрьскому событию .NET Conf, с 18-месячной поддержкой выпусков STS (стандартная поддержка) и тремя годами поддержки выпусков LTS (долгосрочная поддержка). Версии .NET с нечетными номерами — это STS, а версии с четными номерами — LTS.

Следующий выпуск .NET LTS

Следующим выпуском .NET, который выйдет в ноябре 2023 года, будет .NET 8. Будучи выпуском LTS, .NET 8 станет версией .NET по умолчанию во многих организациях как минимум на следующие два года. .NET 7 привнес много изменений, и эта новая версия основана на них, добавляя при этом больше новых функций. Стоит потратить некоторое время на текущие предварительные выпуски, чтобы увидеть, как существующий код переносится в новую версию, и определить, какие изменения вам, возможно, потребуется внести.

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

Улучшения сборщика мусора .NET

Один новый API особенно интересен, по крайней мере, если вы создаете .NET-код для облачных приложений, работающих на таких платформах, как Kubernetes. Теперь вы можете изменить ограничение памяти для приложения на лету, используя сборщик мусора .NET. Это позволяет увеличивать и уменьшать потребление ресурсов приложения в зависимости от спроса. Когда спрос низкий, приложения можно масштабировать до минимума, гарантируя, что вы не будете платить за ненужные ресурсы.

Обновление JSON

Также было улучшено управление сериализацией и десериализацией JSON в .NET за счет добавления поддержки новых числовых типов, включая новую полуструктуру. Здесь реализуется тип float16 IEEE, поэтому он может быть полезен при доставке данных в модели машинного обучения. Числа половинной точности более точно соответствуют оборудованию с плавающей запятой, используемому в аппаратных ускорителях и NPU, а также новым числовым инструкциям, недавно добавленным в процессоры Intel, и упрощают использование вычислительных инструментов общего назначения на графическом процессоре. Нормализация числовых значений до половинной точности при сериализации должна позволить таким инструментам работать более эффективно.

Команда .NET проделала большую работу над своим инструментарием JSON, помимо добавления поддержки новых типов. Новые методы API упрощают запись определенных узлов в документ JSON, а другие функции улучшают управление содержимым вашего JSON в .NET. Эти обновления помогают обеспечить целостность документов JSON и укрепить роль .NET в облачной разработке, поскольку JSON теперь представляет собой наиболее распространенную полезную нагрузку при вызове REST API.

Новые методы .NET для случайности

Еще одна ключевая область обновлений — поддержка новых инструментов, обеспечивающих случайность. Это не знакомый генератор случайных чисел, а более прямой способ использования случайности в качестве селектора в вашем коде. Вместо выполнения вычислений вы можете случайным образом выбирать элементы из входного набора и помещать их в выходной массив, готовый к использованию. Инструмент дает вам возможность случайным образом перемешивать элементы в наборе данных. Как и многие другие новые функции .NET, это может быть полезно при работе с машинным обучением. Например, вам будет проще перетасовать ваши данные, чтобы данные обучения и тестирования различались каждый раз при построении модели, что снижает риск систематической ошибки в ваших данных.

С этим тесно связан набор новых криптографических инструментов, добавляющих поддержку SHA-3 в качестве альтернативы SHA-2. Улучшенное хеширование всегда важно, поскольку оно помогает подготовить код к новым криптографическим стандартам. Другие улучшенные функции безопасности означают, что веб-прокси теперь можно использовать через HTTPS, что повышает конфиденциальность соединений между вашими приложениями и остальной частью Интернета.

.NET и кремний нового поколения

Некоторые новые функции связаны с достижениями микросхем, поэтому они не будут доступны на всех платформах. К ним относятся функции векторного ускорения, созданные на основе набора инструкций Intel AVX-512. .NET 8 предоставляет флаг для проверки поддержки AVX, поэтому вы можете написать код обработки ошибок, чтобы избежать вызова новых векторных инструкций на более старых процессорах или на процессорах AMD или Arm. Если у вас есть аппаратное обеспечение AVX-512, обновленный компилятор .NET повышает производительность старых инструкций для векторов и массивов, поскольку они по-прежнему могут использовать новые аппаратные функции.

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

Критические изменения в .NET 8

Самый большой риск для вашего существующего кода связан с критическими изменениями в .NET 8. Большинство из них не станут сюрпризом, поскольку являются результатом запланированного прекращения поддержки или изменений в инфраструктуре поддержки. Здесь не должно быть слишком много проблем, поскольку обходные пути доступны везде, где необходимы изменения кода.

Поскольку .NET больше не является технологией только для Windows, одной из областей, которая открывает ряд изменений, являются связанные образы контейнеров. Эти изменения в основном связаны с обновленными версиями хост-дистрибутивов Linux (например, обновлением версии хоста Debian), а также с изменениями, которые делают образы меньше и проще в использовании. Некоторые из самых больших изменений коснулись образов Alpine, поскольку Alpine больше не поддерживает Kerberos и изменилось место хранения сертификатов. Может показаться, что 3 МБ не так уж сильно уменьшают размер образа контейнера, но если учесть, сколько образов развертывается в течение жизненного цикла приложения Kubernetes, каждые 3 МБ приводят к значительной экономии пропускной способности.

Другие изменения связаны с улучшением понимания зависимостей .NET от общих библиотек. Там, где они не требуются, они больше не включаются. Это не повлияет на ваш код .NET, но может повлиять на другой код, работающий в том же контейнере. Лучше всего изолировать функциональные возможности, поскольку это снижает риски безопасности, поэтому, если вы используете контейнер .NET для размещения другого кода, рекомендуется перепроектировать свое приложение, чтобы гарантировать правильное секционирование кода.

Microsoft предоставляет регулярно обновляемый список критических изменений в документации по предварительной версии .NET 8 с указанием, в какой предварительной версии произошло изменение. Большинство из них были в первой предварительной версии, и лишь несколько добавлено в последней версии. Многие изменения носят поведенческий характер. Таким образом, хотя функции могли быть удалены или изменены, у вас должна быть возможность переключиться на новые способы работы или на альтернативы.

Остерегайтесь Windows Forms

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

.NET 8 — это нечто большее, чем этот краткий обзор. Некоторые новые функции упрощают создание предварительно скомпилированных приложений, а другие повышают производительность процессоров Apple. Если сложить все это вместе, .NET 8 выглядит как большое обновление LTS-версии. Того, что вы здесь получите, будет более чем достаточно, чтобы сохранить ваш код конкурентоспособным и безопасным в течение следующих трех лет — а это именно то, чего вы хотите от такой платформы, как .NET.

Дальше читайте это:

  • Облачные вычисления больше не являются пустяком
  • Что такое генеративный ИИ? Искусственный интеллект, который создает
  • Программирование с помощью ИИ: советы и лучшие практики от разработчиков
  • Python пытается удалить GIL и повысить параллелизм
  • 7 причин, по которым Java по-прежнему хороша
  • Война за лицензирование открытого исходного кода окончена

Related Posts

Оставить комментарий