- Регистрация
- 21.07.20
- Сообщения
- 40.408
- Реакции
- 1
- Репутация
- 0
Команда Rust рада сообщить о выпуске новой версии, 1.47.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Если вы установили предыдущую версию Rust средствами rustup, то для обновления до версии 1.47.0 вам достаточно выполнить следующую команду:
rustup update stable
Если у вас ещё не установлен rustup, вы можете
Что вошло в стабильную версию 1.47.0
Данный выпуск не содержит новых языковых особенностей, хотя он добавляет одну долгожданную функцию стандартной библиотеки. По большей части, в этом выпуске повышается качество жизни, добавляются константные функции и стабилизируется стандартная библиотека, а также улучшается инструментарий. Смотрите
Типажи на больших массивах
Rust всё ещё не поддерживает обобщения для целочисленных значений. Это давно вызывает проблемы с массивами, так как они имеют целочисленную часть в своём типе. [T; N] представляет массив длины N со значениями типа T. Поскольку нет способа сделать его обобщённым по N, типажи для массивов приходится реализовывать вручную для каждого нужного вам N. Для стандартной библиотеки было решено поддерживать N до 32.
Мы работали над особенностью, называемой "const generics" ("константные обобщения"), которая позволяет вам обобщать по N. Полное описание константных обобщений выходит за рамки данного анонса, так как они ещё до конца не стабилизированы. Однако, основная их часть реализована в компиляторе и было принято решение, что константные обобщения достаточно готовы, чтобы
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:ebug` for `[{integer}; 34]`
= note: required by `std::fmt:ebug::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, где
fn main() {
panic!();
}
давала подобную трассировку:
thread 'main' panicked at 'explicit panic', src/main.rs:2:5
stack 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: ::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:rint
at src/libstd/sys_common/backtrace.rs:49
8: std:anicking::default_hook::{{closure}}
at src/libstd/panicking.rs:198
9: std:anicking::default_hook
at src/libstd/panicking.rs:217
10: std:anicking::rust_panic_with_hook
at src/libstd/panicking.rs:526
11: std:anicking::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:anicking::try::do_call
at src/libstd/panicking.rs:348
16: std:anicking::try
at src/libstd/panicking.rs:325
17: std:anic::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:5
stack backtrace:
0: std:anicking::begin_panic
at /rustc/d6646f64790018719caebeafd352a92adfa1d75a/library/std/src/panicking.rs:497
1: playground::main
at ./src/main.rs:2
2: core::function::FnOnce::call_once
at /rustc/d6646f64790018719caebeafd352a92adfa1d75a/library/core/src/ops/function.rs:227
Это позволяет намного легче увидеть, где произошла паника, но вы всё также можете установить RUST_BACKTRACE=full, если хотите видеть всё.
LLVM 11
Мы
Control Flow Guard на Windows
rustc
Изменения в стандартной библиотеке
Дополнительно в этом выпуске были стабилизированы девять новых API:
Следующие, ранее стабилизированные API, стали const:
Для получения более детальной информации, смотрите
Другие изменения
Участники 1.47.0
Множество людей собрались вместе, чтобы создать Rust 1.47.0. Мы не смогли бы сделать это без всех вас.
От переводчиков
С любыми вопросами по языку Rust вам смогут помочь в
Так же можете поддержать нас на opencollective:
Данную статью совместными усилиями перевели
Если вы установили предыдущую версию Rust средствами rustup, то для обновления до версии 1.47.0 вам достаточно выполнить следующую команду:
rustup update stable
Если у вас ещё не установлен rustup, вы можете
You must be registered for see links
с соответствующей страницы нашего веб-сайта, а также посмотреть
You must be registered for see links
.Что вошло в стабильную версию 1.47.0
Данный выпуск не содержит новых языковых особенностей, хотя он добавляет одну долгожданную функцию стандартной библиотеки. По большей части, в этом выпуске повышается качество жизни, добавляются константные функции и стабилизируется стандартная библиотека, а также улучшается инструментарий. Смотрите
You must be registered for see links
, чтобы узнать о других изменениях, не представленных в данном анонсе.Типажи на больших массивах
Rust всё ещё не поддерживает обобщения для целочисленных значений. Это давно вызывает проблемы с массивами, так как они имеют целочисленную часть в своём типе. [T; N] представляет массив длины N со значениями типа T. Поскольку нет способа сделать его обобщённым по N, типажи для массивов приходится реализовывать вручную для каждого нужного вам N. Для стандартной библиотеки было решено поддерживать N до 32.
Мы работали над особенностью, называемой "const generics" ("константные обобщения"), которая позволяет вам обобщать по N. Полное описание константных обобщений выходит за рамки данного анонса, так как они ещё до конца не стабилизированы. Однако, основная их часть реализована в компиляторе и было принято решение, что константные обобщения достаточно готовы, чтобы
You must be registered for see links
. На практике это означает, что если вы попытаетесь сделать нечто подобное в 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:ebug` for `[{integer}; 34]`
= note: required by `std::fmt:ebug::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, где
You must be registered for see links
. В них есть несколько вещей, которые большую часть времени бесполезны. Однако, в некоторых случаях
You must be registered for see links
. В Rust 1.47 виновник нашёлся и
You must be registered for see links
. С момента регресса эта программа:fn main() {
panic!();
}
давала подобную трассировку:
thread 'main' panicked at 'explicit panic', src/main.rs:2:5
stack 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: ::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:rint
at src/libstd/sys_common/backtrace.rs:49
8: std:anicking::default_hook::{{closure}}
at src/libstd/panicking.rs:198
9: std:anicking::default_hook
at src/libstd/panicking.rs:217
10: std:anicking::rust_panic_with_hook
at src/libstd/panicking.rs:526
11: std:anicking::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:anicking::try::do_call
at src/libstd/panicking.rs:348
16: std:anicking::try
at src/libstd/panicking.rs:325
17: std:anic::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:5
stack backtrace:
0: std:anicking::begin_panic
at /rustc/d6646f64790018719caebeafd352a92adfa1d75a/library/std/src/panicking.rs:497
1: playground::main
at ./src/main.rs:2
2: core::function::FnOnce::call_once
at /rustc/d6646f64790018719caebeafd352a92adfa1d75a/library/core/src/ops/function.rs:227
Это позволяет намного легче увидеть, где произошла паника, но вы всё также можете установить RUST_BACKTRACE=full, если хотите видеть всё.
LLVM 11
Мы
You must be registered for see links
. Компилятор по-прежнему может собираться с версиями LLVM до 8, но по умолчанию использует 11 версию.Control Flow Guard на Windows
rustc
You must be registered for see links
-C control-flow-guard, опцию, которая включает
You must be registered for see links
на Windows. Для других платформ этот флаг игнорируется.Изменения в стандартной библиотеке
Дополнительно в этом выпуске были стабилизированы девять новых API:
-
You must be registered for see links
-
You must be registered for see links
-
You must be registered for see links
-
You must be registered for see links
-
You must be registered for see links
-
You must be registered for see links
-
You must be registered for see links
-
You must be registered for see links
-
You must be registered for see links
Следующие, ранее стабилизированные API, стали const:
-
You must be registered for see links
-
You must be registered for see links
-
You must be registered for see links
-
You must be registered for see links
Для получения более детальной информации, смотрите
You must be registered for see links
.Другие изменения
You must be registered for see links
.
You must be registered for see links
,
You must be registered for see links
и
You must be registered for see links
также претерпели некоторые изменения.Участники 1.47.0
Множество людей собрались вместе, чтобы создать Rust 1.47.0. Мы не смогли бы сделать это без всех вас.
You must be registered for see links
От переводчиков
С любыми вопросами по языку Rust вам смогут помочь в
You must be registered for see links
или же в аналогичном
You must be registered for see links
. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в
You must be registered for see links
.Так же можете поддержать нас на opencollective:
You must be registered for see links
.Данную статью совместными усилиями перевели
You must be registered for see links
,
You must be registered for see links
,
You must be registered for see links
,
You must be registered for see links
,
You must be registered for see links
и
You must be registered for see links
.