Оголошення про Rust 1.100: ювілейна версія

Оголошення про Rust 1.100: ювілейна версія

Команда Rust оголосила про випуск Rust 1.100, що є 100-ю стабільною версією мови програмування. Найбільша зміна полягає у стабілізації типу never (!), для якого знадобилося десять років і п’ять невдалих спроб, щоб досягти стабільного Rust. Цей тип представляє обчислення, які ніколи не повертають значення, наприклад, функції, що завжди завершують виконання або викликають паніку.

Нові можливості у Rust 1.100

Хоча Rust вже підтримував тип never у сигнатурах повернення функцій, версія 1.100 дозволяє розробникам використовувати його в будь-якій позиції типу, включаючи загальні типи, такі як Result<T, !>. Існуючий тип Infallible також стає псевдонімом для !, що робить API, які використовують будь-який з цих типів, сумісними.

Проблеми сумісності з типом never

Проте, існує невелика проблема сумісності. Rust 1.100 змінює зворотний виклик типу never з () на ! для видань 2015, 2018 і 2021, що відповідає поведінці, введеній у Rust 2024. Ця зміна повинна вплинути на невелику кількість проектів, проте деякий існуючий код або залежності можуть вимагати оновлень.

Стабілізація Allocator API

Ще одним нововведенням є стабілізація основного Allocator API. Тепер розробники можуть визначати власні аллокатори пам’яті та використовувати їх зі стандартними бібліотечними типами, такими як Vec і Box. Це надає більший контроль над виділенням пам’яті, особливо для програм з особливими вимогами до пам’яті. Підтримка додаткових колекцій та типів вказівників планується для майбутніх випусків.

Новий DropGuard у Rust 1.100

Rust 1.100 також впроваджує DropGuard, нового допоміжного засобу стандартної бібліотеки, який виконує замикання, коли значення виходить з області видимості, включаючи випадки, коли функція завершує роботу раніше або викликає паніку. Він містить метод dismiss, який запобігає виконанню дій очищення, що робить його корисним для операцій, які потребують скасування змін у разі виникнення помилки.

Покращення у Cargo

У середовищі розробки Cargo отримує новий механізм охолодження залежностей для зменшення впливу атак на програмне забезпечення. Ця функція дозволяє розробникам вказувати мінімальний вік для нових пакетів, перед тим як Cargo враховує їх під час вирішення залежностей. Функція є необов’язковою та не поширюється на cargo install.

Поліпшення звітності про невикористані залежності

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

Поліпшення кешування збірок

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

Стабілізація функції std::mem::conjure_zst

На завершення, випуск стабілізує std::mem::conjure_zst, небезпечну функцію для побудови типів нульового розміру, коли розробники можуть гарантувати, що це валідно. Також стабілізовано кілька менших API, включаючи bool::toggle, Vec::from_fn та нові методи обрізки префіксів і суфіксів для рядків та інших типів.

Додаткова інформація доступна в офіційних пам’ятках про випуск. Поточні установки, керовані через Rustup, можна оновити, виконуючи команду rustup update stable.