Rust в 2025 году: обзор главных новинок и изменений

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение

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.
  • Встроенная поддержка тестовых контейнеров — теперь можно легко настраивать изолированные тестовые среды (песочницы) для интеграционных тестов без использования внешних инструментов.
# Пример                

Блоги

Рекомендаций по книгам