Rust 1.88.0: нові можливості та функціональність

Опубліковано новий стабільний реліз компілятора та стандарту мови Rust 1.88.0. Ця версія представляє кілька важливих нововведень, що розширюють функціональність мови програмування.

Функції без прологу та епілогу

Однією з головних нових можливостей Rust 1.88.0 є синтаксис для опису функцій без прологу та епілогу. Тіло таких функцій має складатися з блоку `naked_asm!`:

#[unsafe(naked)]
pub unsafe extern "sysv64" fn wrapping_add(a: u64, b: u64) -> u64 {
    // Equivalent to `a.wrapping_add(b)`.
    core::arch::naked_asm!(
        "lea rax, [rdi + rsi]",
        "ret"
    );
}

Ланцюжки умов у виразах if/while

Тепер у Rust можна оголошувати дві та більше змінних в умовних виразах `if` та `while`. Ця функція значно покращує читабельність коду:

if let Channel::Stable(v) = release_info() &&
   let Semver { major, minor, .. } = v &&
   major == 1 &&
   minor == 88 {
    println!("`let_chains` was stabilized in this version");
}

Константи true та false у DSL для умовної компіляції

В DSL для умовної компіляції `cfg` додано константи `true` та `false`. Крім того, вони також доступні в макросі `cfg!`. Це спрощує написання умовної компіляції.

Попередження про нульовий вказівник

Додано нове попередження при спробі звернення до нульового вказівника для функцій, коректна робота яких вимагає ненульових адрес. Наприклад, спроба створити об’єкт `std::slice` за нульовою адресою:

// Undefined behavior
unsafe { std::slice::from_raw_parts(ptr::null(), 1); }

Тепер така дія викликає попередження. За замовчуванням це попередження має рівень `deny-by-default`, тобто компілятор розглядатиме його як помилку.

Висновок

Rust 1.88.0 представляє важливі покращення, особливо для системних програмістів. Функції без прологу та епілогу надають більше контролю над низькорівневим кодом. Ланцюжки умов спрощують логіку та роблять код чистішим.

Детальніше з усіма нововведеннями можна ознайомитись у повному списку змін або в офіційному оголошенні Rust 1.88.0.