Как стать автором
Обновить

Вышел Rust 1.60

Время на прочтение4 мин
Количество просмотров2.7K

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

Теги:
Хабы:
Всего голосов 6: ↑5 и ↓1+5
Комментарии0

Другие новости

Истории

Работа

Rust разработчик
8 вакансий

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань