Команда Rust рада объявить о новом выпуске Rust 1.94.0. Rust — это язык программирования, который дает каждому возможность создавать надежное и эффективное программное обеспечение.
Если у вас уже установлена предыдущая версия Rust через rustup, вы можете получить 1.94.0 командой:
$ rustup update stable
Если у вас еще не установлен Rust, вы можете получить rustup на соответствующей странице нашего сайта, а также ознакомиться с подробными примечаниями к выпуску 1.94.0.
Если вы хотите помочь нам, тестируя будущие релизы, попробуйте локально переключиться на beta-канал (rustup default beta) или nightly-канал (rustup default nightly). Пожалуйста, сообщайте о любых найденных ошибках!
Что вошло в стабильный 1.94.0
Новый метод массива array_windows
В Rust 1.94 добавлен array_windows — метод итерации для срезов. Он работает так же, как windows, но с постоянной длиной, поэтому элементы итератора имеют тип &[T; N], а не динамически-размерный &[T]. Во многих случаях длина окна может даже выводиться из того, как используется итератор!
Например, в одной из задач Advent of Code 2016 нужно находить шаблоны ABBA: «две разные буквы, за которыми следует обратный порядок этой пары, например xyyx или abba». Если предположить, что используются только ASCII-символы, это можно записать, проходя окнами по байтовому срезу так:
fn has_abba(s: &str) -> bool { s.as_bytes() .array_windows() .any(|[a1, b1, b2, a2]| (a1 != b1) && (a1 == a2) && (b1 == b2))}
Паттерн деструктуризации аргумента в этом замыкании позволяет компилятору вывести, что здесь нужны окна длины 4. Если бы мы использовали более старый итератор .windows(4), тогда аргументом был бы срез, который пришлось бы индексировать вручную, надеясь, что проверки границ во время выполнения будут оптимизированы.
Подключение конфигов Cargo
Cargo теперь поддерживает ключ include в конфигурационных файлах (.cargo/config.toml), что улучшает организацию, совместное использование и управление конфигурациями Cargo между проектами и окружениями. Эти пути включения также можно помечать как optional, если в некоторых ситуациях файлы могут отсутствовать, например в зависимости от локальных настроек разработчика.
# массив путейinclude = [ "frodo.toml", "samwise.toml",]# inline-таблицы для более тонкого контроляinclude = [ { path = "required.toml" }, { path = "optional.toml", optional = true },]
Подробности смотрите в полной документации include.
Поддержка TOML 1.1 в Cargo
Cargo теперь разбирает TOML v1.1 для манифестов и конфигурационных файлов. Подробные изменения смотрите в примечаниях к выпуску TOML, среди них:
-
Inline-таблицы на нескольких строках и с завершающими запятыми
-
Символы экранирования строк
\xHHи\e -
Необязательные секунды во времени (устанавливаются в 0)
Например, зависимость вида:
serde = { version = "1.0", features = ["derive"] }
… теперь можно записывать так:
serde = { version = "1.0", features = ["derive"],}
Обратите внимание, что использование этих возможностей в Cargo.toml поднимет ваш MSRV разработки (минимальную поддерживаемую версию Rust) до уровня, требующего нового парсера Cargo, а сторонним инструментам, читающим манифест, также может понадобиться обновить свои парсеры. Однако при публикации Cargo автоматически переписывает манифесты так, чтобы они оставались совместимыми со старыми парсерами, поэтому для пользователей вашего крейта все еще можно поддерживать более ранний MSRV.
Стабилизированные API
-
x86
avx512fp16intrinsic-функции (за исключением тех, которые напрямую зависят от нестабильного типаf16) -
AArch64 NEON fp16 intrinsic-функции (за исключением тех, которые напрямую зависят от нестабильного типа
f16)
Эти API, ранее уже стабильные, теперь также стабильны в const-контекстах:
Другие изменения
Смотрите полный список изменений в Rust, Cargo и Clippy.
Участники релиза 1.94.0
Над созданием Rust 1.94.0 работало много людей. Без вас это было бы невозможно. Спасибо!
ссылка на оригинал статьи https://habr.com/ru/articles/1024612/