Вышла Превью 1 .NET 11. Начало
Команда Microsoft .NET выпустила первую предварительную версию .NET 11. Про главную особенность превью – асинхронную обработку в среде выполнения – я уже писал. Теперь рассмотрим другие важные новинки.
Библиотеки
1. Добавлена нативная поддержка сжатия Zstandard (zstd) благодаря новому классу ZstandardStream. Zstandard обеспечивает значительно более быстрое сжатие и распаковку по сравнению с существующими алгоритмами, сохраняя при этом конкурентоспособные коэффициенты сжатия. Новые API включают полный набор возможностей потокового, однократного и словарного сжатия и распаковки.
// Сжатие с ZstandardStream
using var compressStream =
new ZstandardStream(outputStream, CompressionMode.Compress);
await inputStream.CopyToAsync(compressStream);
// Распаковка
using var decompressStream
= new ZstandardStream(inputStream, CompressionMode.Decompress);
await decompressStream.CopyToAsync(outputStream);
2. В ZipArchiveEntry добавлены:
- параметр FileAccess, позволяющий указать, тип доступа к открываемому файлу FileAccess.Read или FileAccess.Write;
- свойство CompressionMethod в ZipArchiveEntry типа перечисления ZipCompressionMethod, позволяющее приложениям определять алгоритм сжатия для каждой записи.
3. Добавлены аргументы выражений коллекций с ключевым словом with и поддержка выражений коллекций для FrozenDictionary:
FrozenDictionary<string, int> lookup =
[with(StringComparer.Ordinal), "one":1, "two":2, "three":3];
4. Поддержка рун в String, StringBuilder и TextWriter
System.Text.Rune теперь можно использовать гораздо шире. Это значительно упрощает корректную работу приложений с текстом Unicode, особенно для символов, находящихся за пределами базовой многоязычной плоскости, которые требуют суррогатных пар при представлении в виде символов:
var s = "Hello 🌍";
var glb = new Rune(0x1F30D); // 🌍
s.Contains(glb); // true
s.IndexOf(glb); // 6
s.StartsWith(glb); // false
s.Replace(glb, new Rune('X')); // "Hello X"
5. Помощник по MIME-типам System.Net.Mime.MediaTypeMap
6. API для проверки HMAC и KMAC
Добавлены методы Verify ко всем классам HMAC и KMAC. Значения HMAC часто необходимо сравнивать за фиксированное время, чтобы предотвратить атаки по времени. Ранее это требовало двух шагов: вычисления HMAC с помощью HashData, а затем сравнения с помощью CryptographicOperations.FixedTimeEquals. Новые методы Verify объединяют оба этапа в один безопасный вызов.
7. DivisionRounding для целочисленного деления
Добавлена поддержка альтернативных режимов округления при целочисленном делении с помощью нового перечисления DivisionRounding и новых методов в IBinaryInteger<T>: Divide, DivRem и Remainder. Большинство аппаратных средств реализуют деление нацело (/ и % в C#), но разные языки и предметные области требуют округления до большего или меньшего целого числа, евклидова округления или округления от нуля. Хотя это довольно тривиально, новые API позволяют выбрать правильный режим и хорошо оптимизированную реализацию:
int truncated =
int.Divide(-7, 2, DivisionRounding.Truncate); // -3
int floored =
int.Divide(-7, 2, DivisionRounding.Floor); // -4
// всегда неотрицательный
int euclideanRem =
int.Remainder(-7, 3, DivisionRounding.Euclidean); // 2
// Получаем частное и остаток сразу
var (q, r) =
int.DivRem(-7, 2, DivisionRounding.Floor); // q=-4, r=1
Окончание следует…
Источник: https://github.com/dotnet/core/tree/main/release-notes/11.0/preview/preview1