Стал доступен релиз 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; поддержку деструктурированных (параллельных) присвоений и т.д.)