Апублікаваны рэліз мовы праграмавання агульнага прызначэння Rust 1.67, заснаванага праектам Mozilla, але цяпер які развіваецца пад заступніцтвам незалежнай некамерцыйнай арганізацыі Rust Foundation. Мова сфакусаваная на бяспечнай працы з памяццю і дае сродкі для дасягнення высокага паралелізму выканання заданняў, пры гэтым абыходзячыся без выкарыстання зборшчыка смецця і runtime (runtime зводзіцца да базавай ініцыялізацыі і суправаджэння стандартнай бібліятэкі).
Метады працы з памяццю ў Rust пазбаўляюць распрацоўніка ад памылак пры маніпуляванні паказальнікамі і абараняюць ад праблем, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў, вынахад за межы буфера і да т.п. Для распаўсюджвання бібліятэк, забеспячэнні зборкі і кіраванні залежнасцямі праектам развіваецца пакетны мэнэджар Cargo. Для размяшчэння бібліятэк падтрымліваецца рэпазітар crates.io.
Бяспечная праца з памяццю забяспечваецца ў Rust падчас кампіляцыі праз праверку спасылак, адсочванне валодання аб'ектамі, улік часу жыцця аб'ектаў (вобласці бачнасці) і адзнаку карэктнасці доступу да памяці падчас выканання кода. Rust таксама дае сродкі для абароны ад цэлалікіх перапаўненняў, патрабуе абавязковай ініцыялізацыі значэнняў зменных перад выкарыстаннем, лепш апрацоўвае памылкі ў стандартнай бібліятэцы, ужывае канцэпцыю нязменнасці (immutable) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.
Асноўныя навіны:
- Для функцый async з Future::Output рэалізаваная магчымасць указання анатацый «#[must_use]», улучальных выснова папярэджання ў выпадку ігнаравання якое вяртаецца значэння, што дапамагае выявіць памылкі, выкліканыя здагадкай, што функцыя зменіць значэнні, а не верне новае значэнне. #[must_use] async fn bar() -> u32 { 0 } async fn caller() { bar().await; } warning: unused output of future returned by `bar` that must be used —> src/lib.rs:5:5 | 5 | bar().await; | ^^^^^^^^^^^ | = note: `#[warn(unused_must_use)]` on by default
- Абноўлена рэалізацыя FIFO-чэргаў std::sync::mpsc (multi-producer single-consumer), якая пераведзена на выкарыстанне модуля crossbeam-channel з захаваннем ранейшага API. Новая рэалізацыя адрозніваецца рашэннем шэрагу праблем, больш высокай прадукцыйнасцю і спрашчэннем суправаджэння кода.
- У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны метады і рэалізацыі тыпажоў:
- {integer}::checked_ilog
- {integer}::checked_ilog2
- {integer}::checked_ilog10
- {integer}::ilog
- {integer}::ilog2
- {integer}::ilog10
- NonZeroU*::ilog2
- NonZeroU*::ilog10
- NonZero*::BITS
- Прыкмета "const", якая вызначае магчымасць выкарыстання ў любым кантэксце замест канстант, ужыты ў функцыях:
- char::from_u32
- char::from_digit
- char::to_digit
- core::char::from_u32
- core::char::from_digit
- Рэалізаваны трэці ўзровень падтрымкі для выкарыстання Rust у ядры Linux (linuxkernel), а таксама для платформаў Sony PlayStation 1 (mipsel-sony-psx), PowerPC з AIX (powerpc64-ibm-aix), QNX Neutrino RTOS (aarch64-unknown-nto- qnx710, x86_64-pc-nto-qnx710). Трэці ўзровень мае на ўвазе базавую падтрымку, але без аўтаматызаванага тэсціравання, публікацыі афіцыйных зборак і праверкі магчымасці зборкі кода.
Дадаткова можна адзначыць публікацыю кампаніяй ARM патчаў, якія дазваляюць выкарыстоўваць мову Rust для распрацоўкі драйвераў і модуляў ядра Linux, якія збіраюцца для сістэм на базе архітэктуры AArch64.
Крыніца: opennet.ru