Skip to content

Commit 0a74129

Browse files
authored
Create Rust-1.94.0.md
1 parent db4a482 commit 0a74129

1 file changed

Lines changed: 125 additions & 0 deletions

File tree

ru/announcements/Rust-1.94.0.md

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
+++
2+
path = "2026/03/05/Rust-1.94.0"
3+
title = "Анонс Rust 1.94.0"
4+
authors = ["Команда выпуска Rust"]
5+
aliases = ["releases/1.94.0"]
6+
7+
[extra]
8+
release = true
9+
+++
10+
11+
Команда Rust рада объявить о новом выпуске Rust 1.94.0. Rust — это язык программирования, который дает каждому возможность создавать надежное и эффективное программное обеспечение.
12+
13+
Если у вас уже установлена предыдущая версия Rust через `rustup`, вы можете получить 1.94.0 командой:
14+
15+
```console
16+
$ rustup update stable
17+
```
18+
19+
Если у вас еще не установлен Rust, вы можете [получить `rustup`](https://www.rust-lang.org/install.html) на соответствующей странице нашего сайта, а также ознакомиться с [подробными примечаниями к выпуску 1.94.0](https://doc.rust-lang.org/stable/releases.html#version-1940-2026-03-05).
20+
21+
Если вы хотите помочь нам, тестируя будущие релизы, попробуйте локально переключиться на beta-канал (`rustup default beta`) или nightly-канал (`rustup default nightly`). Пожалуйста, [сообщайте](https://github.com/rust-lang/rust/issues/new/choose) о любых найденных ошибках!
22+
23+
## Что вошло в стабильный 1.94.0
24+
25+
### Окна массива
26+
27+
В Rust 1.94 добавлен [`array_windows`] — метод итерации для срезов. Он работает так же, как [`windows`], но с постоянной длиной, поэтому элементы итератора имеют тип `&[T; N]`, а не динамически-размерный `&[T]`. Во многих случаях длина окна может даже выводиться из того, как используется итератор!
28+
29+
Например, в одной из задач [Advent of Code 2016](https://adventofcode.com/2016/day/7) нужно находить шаблоны ABBA: «две разные буквы, за которыми следует обратный порядок этой пары, например `xyyx` или `abba`». Если предположить, что используются только ASCII-символы, это можно записать, проходя окнами по байтовому срезу так:
30+
31+
```rust
32+
fn has_abba(s: &str) -> bool {
33+
s.as_bytes()
34+
.array_windows()
35+
.any(|[a1, b1, b2, a2]| (a1 != b1) && (a1 == a2) && (b1 == b2))
36+
}
37+
```
38+
39+
Паттерн деструктуризации аргумента в этом замыкании позволяет компилятору вывести, что здесь нужны окна длины 4. Если бы мы использовали более старый итератор `.windows(4)`, тогда аргументом был бы срез, который пришлось бы индексировать вручную, *надеясь*, что проверки границ во время выполнения будут оптимизированы.
40+
41+
[`array_windows`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.array_windows
42+
[`windows`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.windows
43+
44+
### Подключение конфигов Cargo
45+
46+
Cargo теперь поддерживает ключ `include` в конфигурационных файлах (`.cargo/config.toml`), что улучшает организацию, совместное использование и управление конфигурациями Cargo между проектами и окружениями. Эти пути включения также можно помечать как `optional`, если в некоторых ситуациях файлы могут отсутствовать, например в зависимости от локальных настроек разработчика.
47+
48+
```toml
49+
# массив путей
50+
include = [
51+
"frodo.toml",
52+
"samwise.toml",
53+
]
54+
55+
# inline-таблицы для более тонкого контроля
56+
include = [
57+
{ path = "required.toml" },
58+
{ path = "optional.toml", optional = true },
59+
]
60+
```
61+
62+
Подробности смотрите в полной [документации `include`](https://doc.rust-lang.org/nightly/cargo/reference/config.html#including-extra-configuration-files).
63+
64+
### Поддержка TOML 1.1 в Cargo
65+
66+
Cargo теперь разбирает [TOML v1.1](https://toml.io/en/v1.1.0) для манифестов и конфигурационных файлов. Подробные изменения смотрите в [примечаниях к выпуску TOML](https://github.com/toml-lang/toml/releases/tag/1.1.0), среди них:
67+
68+
* Inline-таблицы на нескольких строках и с завершающими запятыми
69+
* Символы экранирования строк `\xHH` и `\e`
70+
* Необязательные секунды во времени (устанавливаются в 0)
71+
72+
Например, зависимость вида:
73+
74+
```toml
75+
serde = { version = "1.0", features = ["derive"] }
76+
```
77+
78+
... теперь можно записывать так:
79+
80+
<!-- FIXME: this should be toml, but the blog highlighting doesn't support 1.1 yet -->
81+
```text
82+
serde = {
83+
version = "1.0",
84+
features = ["derive"],
85+
}
86+
```
87+
88+
Обратите внимание, что использование этих возможностей в `Cargo.toml` поднимет ваш MSRV разработки (минимальную поддерживаемую версию Rust) до уровня, требующего нового парсера Cargo, а сторонним инструментам, читающим манифест, также может понадобиться обновить свои парсеры. Однако при публикации Cargo автоматически переписывает манифесты так, чтобы они оставались совместимыми со старыми парсерами, поэтому для пользователей вашего крейта все еще можно поддерживать более ранний MSRV.
89+
90+
### Стабилизированные API
91+
92+
- [`<[T]>::array_windows`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.array_windows)
93+
- [`<[T]>::element_offset`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.element_offset)
94+
- [`LazyCell::get`](https://doc.rust-lang.org/stable/std/cell/struct.LazyCell.html#method.get)
95+
- [`LazyCell::get_mut`](https://doc.rust-lang.org/stable/std/cell/struct.LazyCell.html#method.get_mut)
96+
- [`LazyCell::force_mut`](https://doc.rust-lang.org/stable/std/cell/struct.LazyCell.html#method.force_mut)
97+
- [`LazyLock::get`](https://doc.rust-lang.org/stable/std/sync/struct.LazyLock.html#method.get)
98+
- [`LazyLock::get_mut`](https://doc.rust-lang.org/stable/std/sync/struct.LazyLock.html#method.get_mut)
99+
- [`LazyLock::force_mut`](https://doc.rust-lang.org/stable/std/sync/struct.LazyLock.html#method.force_mut)
100+
- [`impl TryFrom<char> for usize`](https://doc.rust-lang.org/stable/std/convert/trait.TryFrom.html#impl-TryFrom%3Cchar%3E-for-usize)
101+
- [`std::iter::Peekable::next_if_map`](https://doc.rust-lang.org/stable/std/iter/struct.Peekable.html#method.next_if_map)
102+
- [`std::iter::Peekable::next_if_map_mut`](https://doc.rust-lang.org/stable/std/iter/struct.Peekable.html#method.next_if_map_mut)
103+
- [x86 `avx512fp16` intrinsic-функции](https://github.com/rust-lang/rust/issues/127213)
104+
(за исключением тех, которые напрямую зависят от нестабильного типа `f16`)
105+
- [AArch64 NEON fp16 intrinsic-функции](https://github.com/rust-lang/rust/issues/136306)
106+
(за исключением тех, которые напрямую зависят от нестабильного типа `f16`)
107+
- [`f32::consts::EULER_GAMMA`](https://doc.rust-lang.org/stable/std/f32/consts/constant.EULER_GAMMA.html)
108+
- [`f64::consts::EULER_GAMMA`](https://doc.rust-lang.org/stable/std/f64/consts/constant.EULER_GAMMA.html)
109+
- [`f32::consts::GOLDEN_RATIO`](https://doc.rust-lang.org/stable/std/f32/consts/constant.GOLDEN_RATIO.html)
110+
- [`f64::consts::GOLDEN_RATIO`](https://doc.rust-lang.org/stable/std/f64/consts/constant.GOLDEN_RATIO.html)
111+
112+
Эти API, ранее уже стабильные, теперь также стабильны в `const`-контекстах:
113+
114+
- [`f32::mul_add`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.mul_add)
115+
- [`f64::mul_add`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.mul_add)
116+
117+
### Другие изменения
118+
119+
Смотрите полный список изменений в [Rust](https://github.com/rust-lang/rust/releases/tag/1.94.0), [Cargo](https://doc.rust-lang.org/nightly/cargo/CHANGELOG.html#cargo-194-2026-03-05) и [Clippy](https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-194).
120+
121+
## Участники релиза 1.94.0
122+
123+
Над созданием Rust 1.94.0 работало много людей. Без вас это было бы невозможно. [Спасибо!](https://thanks.rust-lang.org/rust/1.94.0/)
124+
125+
[platform-support]: https://doc.rust-lang.org/rustc/platform-support.html

0 commit comments

Comments
 (0)