Русский
Русский
English
Статистика
Реклама

Перевод Rust 1.47.0 const generics для массивов, LLVM 11, Control Flow Guard и сокращение трассировок

Команда Rust рада сообщить о выпуске новой версии, 1.47.0. Rust это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если вы установили предыдущую версию Rust средствами rustup, то для обновления до версии 1.47.0 вам достаточно выполнить следующую команду:


rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.


Что вошло в стабильную версию 1.47.0


Данный выпуск не содержит новых языковых особенностей, хотя он добавляет одну долгожданную функцию стандартной библиотеки. По большей части, в этом выпуске повышается качество жизни, добавляются константные функции и стабилизируется стандартная библиотека, а также улучшается инструментарий. Смотрите подробные примечания к выпуску, чтобы узнать о других изменениях, не представленных в данном анонсе.


Типажи на больших массивах


Rust всё ещё не поддерживает обобщения для целочисленных значений. Это давно вызывает проблемы с массивами, так как они имеют целочисленную часть в своём типе. [T; N] представляет массив длины N со значениями типа T. Поскольку нет способа сделать его обобщённым по N, типажи для массивов приходится реализовывать вручную для каждого нужного вам N. Для стандартной библиотеки было решено поддерживать N до 32.


Мы работали над особенностью, называемой "const generics" ("константные обобщения"), которая позволяет вам обобщать по N. Полное описание константных обобщений выходит за рамки данного анонса, так как они ещё до конца не стабилизированы. Однако, основная их часть реализована в компиляторе и было принято решение, что константные обобщения достаточно готовы, чтобы использовать их в стандартной библиотеке для массивов любой длины. На практике это означает, что если вы попытаетесь сделать нечто подобное в Rust 1.46:


fn main() {    let xs = [0; 34];    println!("{:?}", xs);}

то получите такую ошибку:


error[E0277]: arrays only have std trait implementations for lengths 0..=32 --> src/main.rs:4:22  |4 |     println!("{:?}", xs);  |                      ^^ the trait `std::array::LengthAtMost32` is not implemented for `[{integer}; 34]`  |  = note: required because of the requirements on the impl of `std::fmt::Debug` for `[{integer}; 34]`  = note: required by `std::fmt::Debug::fmt`  = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

Но в Rust 1.47 массив распечатается правильно.


Это должно сделать массивы более полезными, хотя придётся подождать, пока константные обобщения не стабилизируются и библиотеки смогут использовать их для своих собственных типажей. У нас пока нет предположительной даты стабилизации константных обобщений.


Более короткие трассировки


Вернёмся в Rust 1.18, где мы внесли некоторые изменения в трассировки, которые rustc добавлял при панике. В них есть несколько вещей, которые большую часть времени бесполезны. Однако, в некоторых случаях они регрессировали. В Rust 1.47 виновник нашёлся и был исправлен. С момента регресса эта программа:


fn main() {    panic!();}

давала подобную трассировку:


thread 'main' panicked at 'explicit panic', src/main.rs:2:5stack backtrace:   0: backtrace::backtrace::libunwind::trace             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/libunwind.rs:86   1: backtrace::backtrace::trace_unsynchronized             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/mod.rs:66   2: std::sys_common::backtrace::_print_fmt             at src/libstd/sys_common/backtrace.rs:78   3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt             at src/libstd/sys_common/backtrace.rs:59   4: core::fmt::write             at src/libcore/fmt/mod.rs:1076   5: std::io::Write::write_fmt             at src/libstd/io/mod.rs:1537   6: std::sys_common::backtrace::_print             at src/libstd/sys_common/backtrace.rs:62   7: std::sys_common::backtrace::print             at src/libstd/sys_common/backtrace.rs:49   8: std::panicking::default_hook::{{closure}}             at src/libstd/panicking.rs:198   9: std::panicking::default_hook             at src/libstd/panicking.rs:217  10: std::panicking::rust_panic_with_hook             at src/libstd/panicking.rs:526  11: std::panicking::begin_panic             at /rustc/04488afe34512aa4c33566eb16d8c912a3ae04f9/src/libstd/panicking.rs:456  12: playground::main             at src/main.rs:2  13: std::rt::lang_start::{{closure}}             at /rustc/04488afe34512aa4c33566eb16d8c912a3ae04f9/src/libstd/rt.rs:67  14: std::rt::lang_start_internal::{{closure}}             at src/libstd/rt.rs:52  15: std::panicking::try::do_call             at src/libstd/panicking.rs:348  16: std::panicking::try             at src/libstd/panicking.rs:325  17: std::panic::catch_unwind             at src/libstd/panic.rs:394  18: std::rt::lang_start_internal             at src/libstd/rt.rs:51  19: std::rt::lang_start             at /rustc/04488afe34512aa4c33566eb16d8c912a3ae04f9/src/libstd/rt.rs:67  20: main  21: __libc_start_main  22: _start

Теперь, с Rust 1.47.0, вместо неё вы увидите следующее:


thread 'main' panicked at 'explicit panic', src/main.rs:2:5stack backtrace:   0: std::panicking::begin_panic             at /rustc/d6646f64790018719caebeafd352a92adfa1d75a/library/std/src/panicking.rs:497   1: playground::main             at ./src/main.rs:2   2: core::ops::function::FnOnce::call_once             at /rustc/d6646f64790018719caebeafd352a92adfa1d75a/library/core/src/ops/function.rs:227

Это позволяет намного легче увидеть, где произошла паника, но вы всё также можете установить RUST_BACKTRACE=full, если хотите видеть всё.


LLVM 11


Мы обновились до LLVM 11. Компилятор по-прежнему может собираться с версиями LLVM до 8, но по умолчанию использует 11 версию.


Control Flow Guard на Windows


rustc теперь поддерживает -C control-flow-guard, опцию, которая включает Control Flow Guard на Windows. Для других платформ этот флаг игнорируется.


Изменения в стандартной библиотеке


Дополнительно в этом выпуске были стабилизированы девять новых API:



Следующие, ранее стабилизированные API, стали const:



Для получения более детальной информации, смотрите подробные примечания к выпуску.


Другие изменения


Rustdoc начал поддерживать тему Ayu.


Синтаксис, пакетный менеджер Cargo и анализатор Clippy также претерпели некоторые изменения.


Участники 1.47.0


Множество людей собрались вместе, чтобы создать Rust 1.47.0. Мы не смогли бы сделать это без всех вас. Спасибо!


От переводчиков


С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков.
Так же можете поддержать нас на opencollective: https://opencollective.com/rust-lang-ru.


Данную статью совместными усилиями перевели ArtemZdor, fan-tom, funkill, blandger и andreevlex.

Источник: habr.com
К списку статей
Опубликовано: 09.10.2020 12:10:51
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Open source

Rust

Компиляторы

Программирование

Системное программирование

Clippy

Cargo

Rustc

Rustdoc

Rustfmt

Rustfix

Release

Stable

Языки программирования

Стабильная версия

Выпуск версий

Новости технологий

Перевод

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru