Излезе Rust 1.96 с Copy‑приятелски диапазони, по‑добри assert макроси и важни Cargo поправки

0
13

Най‑новото стабилно издание на Rust пристига с промени, които засягат както езиковите конструкции, така и инструментите около компилатора. Версия 1.96 прави диапазоните по‑лесни за използване, подобрява диагностиката при проверки, променя поведението на WebAssembly линкера и затваря две уязвимости в Cargo.

Най‑значимата промяна при Rust 1.96 е стабилизирането на новите типове диапазони в core::range. Досегашните диапазони от core::ops имплементираха директно Iterator, което ги правеше несъвместими с Copy, което е неудобство за разработчиците, които искат да ги използват в леки структури или да ги предават по стойност. Новите Range, RangeFrom и RangeInclusive вече използват IntoIterator и могат да бъдат Copy, като същевременно запазват функционалността си чрез отделни итератори. Синтаксисът 0..1 все още създава старите типове, но това ще се промени в бъдещо издание на езика. Библиотеките се насърчават да използват impl RangeBounds в публичните си API, за да поддържат и двата варианта.

Rust 1.96 стабилизира и макросите, които проверяват дали дадена стойност съвпада с шаблон и при грешка отпечатват Debug представянето ѝassert_matches! / debug_assert_matches!. Това осигурява по‑ясни диагностични съобщения от традиционните проверки с matches!. Макросите не са част от стандартния prelude, за да се избегнат конфликти с външни crates, и трябва да бъдат импортирани ръчно.

Има и важна промяна за WebAssembly целите: компилаторът вече не подава –allow-undefined към линкера по подразбиране. Неопределените символи вече водят до грешка при свързване, вместо да се превръщат автоматично в импорти от „env“. Целта е да се хващат липсващи символи и конфигурационни проблеми още по време на билд. Проекти, които разчитат на старото поведение, могат да го възстановят чрез RUSTFLAGS или чрез атрибута #[link(wasm_import_module = „env“)].

Прочетете още:  Rust за Linux 7.1 добавя експериментална опция за по‑висока производителност

От страна на инструментите Rust 1.96 включва поправки в Cargo за две уязвимости, засягащи потребители на външни регистри. CVE‑2026‑5223 е със средна тежест и засяга обработката на tar архиви със symlink‑ове, а CVE‑2026‑5222 е с ниска тежест и е свързана с удостоверяване при нормализирани URL адреси. Потребителите на crates.io не са засегнати.

Изданието добавя и нови стабилни API, включително From<T> имплементации за AssertUnwindSafe<T>, LazyCell<T, F> и LazyLock<T, F>, както и допълнителни core::range типове като RangeToInclusive и различните им итератори.

Потребителите на Rust могат да преминат към новата версия чрез rustup update stable, като промените ще бъдат достъпни веднага след обновяването.

Повече подробности можете да научите от официалния анонс.

Абониране
Извести ме за
guest
0 Comments
нови
стари оценка