Команда Rust рада сообщить о выпуске новой версии, 1.49.0. Rust это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Если вы установили предыдущую версию Rust средствами
rustup
, то для обновления до версии 1.49.0 вам
достаточно выполнить следующую команду:
rustup update stable
Если у вас ещё не установлен rustup
, вы можете
установить его с соответствующей страницы нашего
веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.
Что вошло в стабильную версию 1.49.0
В этом выпуске мы улучшили поддержку платформ и улучшили фреймворк тестирования. Смотрите подробные примечания к выпуску, чтобы узнать о других изменениях, не представленных в данном анонсе.
64-bit ARM Linux перешёл в Tier 1
Компилятор Rust поддерживает широкий спектр платформ, но команда Rust не может поддерживать все их на одном уровне. Для более явного указания уровня поддержки каждой платформы, мы используем многоуровневую систему:
- Tier 3 технически, платформы поддерживаются компилятором, но мы не проверяли собирается ли на них код или проходят ли тесты, и мы не предоставляем каких-либо бинарных артефактов, как часть наших релизов.
- Платформы из Tier 2 гарантированно собираются, но мы не запускаем для них тесты: предоставляемые артефакты могут быть не рабочими или быть с багами.
- Для платформ из Tier 1 предоставляются наибольшие гарантии и мы запускаем все тесты для этих платформ для каждого изменения, влитого в компилятор. Также мы предоставляем для них собранные артефакты.
Начиная с Rust 1.49.0 платформа
aarch64-unknown-linux-gnu
передвигается на уровень
поддержки Tier 1, предоставляя наши наибольшие гарантии для
пользователей Linux, запущенных на 64-bit ARM системах! Мы ожидаем,
что данное изменение принесёт пользу для всех: от встраиваемых
систем до обычных компьютеров и серверов.
Это важный этап для нашего проекта, поскольку это первая не-x86 платформа, получившая Tier 1 поддержку: мы надеемся, этот шаг откроет путь для большего количества платформ, которые смогу достичь нашего высшего уровня поддержки.
Обратим внимание, что Android не затрагивается данным изменением, так как он представлен другой платформой, находящейся в Tier 2.
64-bit ARM macOS и Windows переходят в Tier 2
В Rust 1.49.0 ещё две платформы достигли Tier 2:
- Платформа
aarch64-apple-darwin
предоставляет поддержку Rust на системах Apple M1. aarch64-pc-windows-msvc
предоставляет поддержку Rust на 64-bit ARM устройствах, работающих под Windows.
Теперь разработчики могут установить обе эти платформы при
помощи rustup
! Команда Rust не запускает тесты для
данных платформ, так что они могут содержать баги или быть
нестабильными.
Фреймворк для тестирования захватывает вывод из потоков
Встроенный в Rust фреймворк для тестирования довольно минималистичен, но это не значит, что его нельзя улучшить! Представьте, что тест выглядит примерно так:
#[test]fn thready_pass() { println!("fee"); std::thread::spawn(|| { println!("fie"); println!("foe"); }) .join() .unwrap(); println!("fum");}
Вот как выглядел запуск этого теста до Rust 1.49.0:
cargo +1.48.0 test Compiling threadtest v0.1.0 (C:\threadtest) Finished test [unoptimized + debuginfo] target(s) in 0.38s Running target\debug\deps\threadtest-02f42ffd9836cae5.exerunning 1 testfiefoetest thready_pass ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out Doc-tests threadtestrunning 0 teststest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Вы можете заметить, что вывод из потоков напечатался и смешался
с выводом самого фреймворка. Было бы неплохо, если бы каждый
println!
работал также, как тот, что напечатал
"fum
"? Что ж, таково поведение в Rust 1.49.0:
cargo test Compiling threadtest v0.1.0 (C:\threadtest) Finished test [unoptimized + debuginfo] target(s) in 0.52s Running target\debug\deps\threadtest-40aabfaa345584be.exerunning 1 testtest thready_pass ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests threadtestrunning 0 teststest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Но не расстраивайтесь, если тест упадёт, вы увидите всё, что он
хотел вывести. Добавив в конец теста panic!
, вы можете
увидеть примерно такую ошибку:
cargo test Compiling threadtest v0.1.0 (C:\threadtest) Finished test [unoptimized + debuginfo] target(s) in 0.52s Running target\debug\deps\threadtest-40aabfaa345584be.exerunning 1 testtest thready_pass ... FAILEDfailures:---- thready_pass stdout ----feefiefoefumthread 'thready_pass' panicked at 'explicit panic', src\lib.rs:11:5
В частности, средство запуска тестов обеспечивает захват вывода и сохраняет его в случае сбоя теста.
Изменения в стандартной библиотеке
В Rust 1.49.0 были стабилизированы следующие 3 функции:
И ещё две функции стали const
:
Смотрите подробные примечания к выпуску для более детальной информации.
Другие изменения
Синтаксис, пакетный менеджер Cargo и анализатор Clippy также претерпели некоторые изменения.
Участники 1.49.0
Множество людей собрались вместе, чтобы создать Rust 1.49.0. Мы не смогли бы сделать это без всех вас. Спасибо!
От переводчиков
С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном
чате для новичковых вопросов. Если у вас есть
вопросы по переводам или хотите помогать с ними, то обращайтесь в
чат переводчиков.
Так же можете поддержать нас на OpenCollective.
Данную статью совместными усилиями перевели andreevlex, funkill, ozkriff, blandger и fan-tom.