Введение
2025 год стал знаковым для экосистемы Rust. Язык, который за последние годы прочно закрепился в нишах системного программирования, веб-сборки (WASM) и инструментов командной строки, продолжает активно развиваться. Команда разработчиков Rust и сообщество выпустили ряд важных обновлений, которые делают язык ещё более производительным, безопасным и удобным.
В этой статье мы разберём ключевые нововведения Rust в 2025 году: от стабилизации асинхронных итераторов до улучшений в работе с WebAssembly и нового подхода к макросам. Если вы уже знакомы с Rust или только присматриваетесь к языку, этот обзор поможет вам понять, куда движется экосистема.
Стабилизация асинхронных итераторов (Async Iterator)
Одним из самых ожидаемых событий 2025 года стала стабилизация трейтов AsyncIterator и AsyncIteratorExt. Раньше работа с асинхронными потоками данных была возможна только через сторонние крейты, такие как futures или tokio-stream. Теперь эта функциональность встроена в стандартную библиотеку.
Что изменилось?
Теперь вы можете писать асинхронные генераторы и комбинировать их стандартными методами, такими как map, filter, collect, прямо в стабильном Rust. Это снижает порог входа и уменьшает количество зависимостей.
// Пример использования стабильного асинхронного итератора
use std::collections::VecDeque;
async fn process_stream() {
let stream = async_stream::stream! {
for i in 0..10 {
yield i * 2;
}
};
// Используем встроенные методы
let result: Vec<i32> = stream
.map(|x| async move { x + 1 })
.filter(|x| async move { *x > 5 })
.collect()
.await;
println!("Результат: {:?}", result);
}
Кроме того, стабилизированы трейты FromAsyncIterator и IntoAsyncIterator, что позволяет легко конвертировать синхронные коллекции в асинхронные и наоборот. Это особенно полезно при работе с сетевыми запросами или файловыми потоками.
Улучшенная поддержка WebAssembly (WASM)
Экосистема Rust и WASM в 2025 году сделала большой шаг вперёд. Главное нововведение — нативная поддержка интерфейса WASI Preview 2 (WebAssembly System Interface). Ранее WASI был в основном экспериментальным, но теперь он стабилизирован и рекомендован для production-использования.
Что это даёт разработчикам?
- Доступ к файловой системе — WASI Preview 2 позволяет безопасно работать с файлами и директориями, что раньше было серьёзным ограничением.
- Сетевые возможности — теперь можно создавать HTTP-серверы и клиенты прямо в WASM, используя стандартные крейты.
- Улучшенная производительность — новый ABI (Application Binary Interface) уменьшает накладные расходы при вызове функций между хостом и модулем WASM.
// Пример простого HTTP-сервера в WASM с использованием WASI Preview 2
use wasi::http::handler;
use wasi::http::types::{Request, Response};
fn main() {
handler::serve(|req: Request| -> Response {
Response::new()
.with_status(200)
.with_body(b"Hello from Rust in WASM!")
});
}
Также стоит отметить значительное улучшение инструментов сборки. wasm-pack получил обновление, которое позволяет автоматически генерировать TypeScript-типы для экспортируемых функций, что упрощает интеграцию Rust-кода с фронтенд-фреймворками.
Макросы 2.0: Новый синтаксис и возможности
Система макросов в Rust всегда была мощной, но сложной для изучения. В 2025 году команда Rust представила Macros 2.0 — новое поколение декларативных макросов, которые призваны заменить старые macro_rules!.
Ключевые изменения
- Чистый синтаксис — макросы теперь объявляются с помощью ключевого слова
macro, без необходимости использовать восклицательный знак и круглые скобки в объявлении. - Улучшенная гигиена — устранены многие проблемы с конфликтами имён, которые преследовали старые макросы.
- Поддержка шаблонов — теперь можно использовать сложные сопоставления с образцом прямо внутри макроса.
// Пример макроса 2.0
macro create_getter {
($field:ident: $type:ty) => {
pub fn $field(&self) -> &$type {
&self.$field
}
};
}
struct User {
name: String,
age: u32,
}
impl User {
create_getter!(name: String);
create_getter!(age: u32);
}
fn main() {
let user = User { name: "Alice".into(), age: 30 };
println!("Name: {}, Age: {}", user.name(), user.age());
}
Старые макросы macro_rules! пока остаются в языке для обратной совместимости, но сообщество активно мигрирует на новый синтаксис. Ожидается, что в ближайших выпусках Rust поддержка старых макросов будет помечена как устаревшая.
Улучшения в Cargo и сборке проектов
Менеджер пакетов Cargo также получил несколько значительных обновлений в 2025 году. Они направлены на ускорение сборки и улучшение управления зависимостями.
Новые возможности Cargo
- Параллельная компиляция крейтов — теперь Cargo может компилировать несколько независимых крейтов одновременно, что сокращает время сборки на многоядерных процессорах до 40%.
- Автоматическое разрешение конфликтов зависимостей — новая эвристика помогает Cargo выбирать оптимальные версии крейтов, уменьшая количество ручных правок в
Cargo.toml. - Встроенная поддержка тестовых контейнеров — теперь можно легко настраивать изолированные тестовые среды (песочницы) для интеграционных тестов без использования внешних инструментов.
# Пример