Вышел Rust 1.60
Стал доступен релиз Rust 1.60, который развивает некоммерческая организация Rust Foundation. Он предоставляет средства для достижения высокого параллелизма выполнения заданий без использования сборщика мусора и runtime.
В версию внедрили несколько новшеств:
в компиляторе rustc стабилизировали основанную на LLVM систему для генерации coverage-данных для оценки охвата кода при тестировании. Чтобы включить coverage-данные, нужно использовать флаг »-Cinstrument-coverage», например, запуская сборку командой «RUSTFLAGS=»-C instrument-coverage» cargo build». После запуска в текущем каталоге сохранится файл default.profraw, для обработки которого можно использовать утилиту llvm-profdata из компонента llvm-tools-preview. Обработанный утилитой llvm-profdata вывод можно передать программе llvm-cov для генерации аннотированного отчета со сведениями об охвате кода. Информация о привязке к исходным текстам извлекается из исследуемого исполняемого файла, в который включаются необходимые данные о связи coverage-счетчиков с кодом;
1| 1|fn main() {
2| 1| println!("Hello, world!");
3| 1|}
в пакетном менеджере cargo стабилизировали поддержку флага »--timings», включающего формирование детального отчета о ходе сборки и времени выполнения каждого шага. Он потребуется для оптимизации производительности сборочного процесса;
в пакетном менеджере cargo предложили новый синтаксис для механизма условной компиляции и выбора необязательных зависимостей в файле Cargo.toml через перечисление списка именованных свойств в секции [features] и активируемого через включение свойств во время сборки пакета при помощи флага »--features». Добавлена поддержка зависимостей в отдельных пространствах имен и слабых зависимостей. Реализована возможность использования внутри секции »[features]» элементов с префиксом «dep:» для явной привязки к необязательной зависимости без неявного представления этой зависимости как свойства (feature). Во втором случае добавлена поддержка пометки знаком »?» («package-name?/feature-name») необязательных зависимостей, которые следует включить, если какое-то другое свойство включает данную необязательную зависимость. Включение свойства serde приведёт к включению зависимости «serde», а также свойства «serde» для зависимости «rgb», но только если где-то ещё включена зависимость «rgb»;
[dependencies]
serde = { version = "1.0.133", optional = true }
rgb = { version = "0.8.25", optional = true }
[features]
serde = ["dep:serde", "rgb?/serde"]
вернули ранее отключенную поддержку инкрементальной компиляции. Устранили соответствующую ошибку;
решили проблемы с предоставлением для таймеров Instant гарантии монотонного расчета времени, при котором учитывается время системы в спящем режиме. До этого для работы таймера по возможности использовался OS API, который не учитывал проблемные ситуации, нарушающие монотонность времени.
перевели в разряд стабильных новые API, в том числе стабилизированы методы и реализации типажей;
Arc::new_cyclic
Rc::new_cyclic
slice::EscapeAscii
<[u8]>::escape_ascii
u8::escape_ascii
Vec::spare_capacity_mut
MaybeUninit::assume_init_drop
MaybeUninit::assume_init_read
i8::abs_diff
i16::abs_diff
i32::abs_diff
i64::abs_diff
i128::abs_diff
isize::abs_diff
u8::abs_diff
u16::abs_diff
u32::abs_diff
u64::abs_diff
u128::abs_diff
usize::abs_diff
Display для io::ErrorKind
From для ExitCode
Not для ! (тип "never")
_Op_Assign<$t>
arch::is_aarch64_feature_detected!
реализовали третий уровень поддержки для платформ mips64-openwrt-linux-musl* и armv7-unknown-linux-uclibceabi (softfloat). Он подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода;
компилятор перевели на использование LLVM 14;
добавили поддержку раскрутки компилятора (bootstrapping) rustc при помощи бэкенда rustc_codegen_gcc, который позволяет использовать библиотеку libgccjit от проекта GCC в качестве генератора кода в rustc, чтобы обеспечить в rustc поддержку доступных в GCC архитектур и оптимизаций. Это позволяет собирать rust-программы для архитектур, ранее не поддерживаемых в rustc;
стал доступен новый выпуск инструментария uutils coreutils 0.0.13, в рамках которого развивается аналог пакета GNU Coreutils, переписанный на языке Rust. Он включает более ста утилит, включая sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln и ls. Это позволяет создать кросс-платформенную альтернативную реализацию Coreutils, которая может работать на Windows, Redox и Fuchsia, а также обеспечивает распространение под пермиссивной лицензией MIT вместо копилефт-лицензии GPL;
улучшены реализации многих утилит, улучшена совместимость утилит cp, dd, df, split и tr с аналогами от проекта GNU. Для разбора аргументов командной строки задействован парсер clap, что позволило улучшить вывод для флага »--help» и добавить поддержку аббревиатур длинных команд (можно указывать «ls --col» вместо «ls --color»).
24 февраля 2022 года вышел Rust 1.59.0. Он включал поддержку ассемблерных вставок и ассемблерных инструкций для архитектур x86, x86–64, ARM, AArch64 и RISC-V;
поддержку деструктурированных (параллельных) присвоений и т.д.