Вышел Rust 1.59.0 — теперь язык ещё надёжнее и быстрее
2026-02-21 05:40 Diff

Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.

Спустя месяц после выхода Rust 1.58.1 разработчики выпускают новую версию — 1.59.0. В ней они поработали над производительностью и новой функциональностью. Рассмотрим главные изменения.

Встроенный ассемблер. Rust теперь поддерживает ассемблер прямо в коде. Это позволит многим приложениям контролировать их выполнение на низком уровне или получать доступ к специализированным машинным инструкциям.

Например, код для систем на архитектуре x86-64 может выглядеть так:

use std::arch::asm; // Умножаем х на 6 с помощью сдвигов и сложений let mut x: u64 = 4; unsafe { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);

Пока Rust поддерживает ассемблер для следующих архитектур:

  • x86 и x86-64
  • ARM
  • AArch64
  • RISC-V

Деструктурированное присваивание. Кортежи, срезы и шаблоны структур теперь можно использовать как левую часть присваивания. Это сделает присваивание более согласованным со связкой let. Разработчики отмечают, что деструктурирование с такими операторами, как +=, не работает.

let (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 3, 4, 5], [a, b, c, d, e]);

Константные дефолтные и чередующиеся дженерики. Теперь можно указывать дефолтные значения для констант дженерик-типов. Например, так:

struct ArrayStorage<T, const N: usize = 2> { arr: [T; N], } impl<T> ArrayStorage<T> { fn new(a: T, b: T) -> ArrayStorage<T> { ArrayStorage { arr: [a, b], } } }

Ранее типы параметров должны были идти перед всеми константными параметрами. Это ограничение было упрощено, чтобы позволить пользователям чередовать их.

fn cartesian_product< T, const N: usize, U, const M: usize, V, F >(a: [T; N], b: [U; M], f: F) -> [[V; N]; M] where F: FnMut(&T, &U) -> V { // ... }

Что ещё? Разработчики предупредили о будущих сообщениях о несовместимости, сделали бинарные файлы меньше, отключили инкрементальную компиляцию по умолчанию и стабилизировали некоторые API.

Подробнее изучить все обновления можно на странице блога Rust.


Бесплатный курс по Python ➞
Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу