Апублікаваны рэліз мовы праграмавання агульнага прызначэння Rust 1.66, заснаванага праектам Mozilla, але цяпер які развіваецца пад заступніцтвам незалежнай некамерцыйнай арганізацыі Rust Foundation. Мова сфакусаваная на бяспечнай працы з памяццю і дае сродкі для дасягнення высокага паралелізму выканання заданняў, пры гэтым абыходзячыся без выкарыстання зборшчыка смецця і runtime (runtime зводзіцца да базавай ініцыялізацыі і суправаджэння стандартнай бібліятэкі).
Метады працы з памяццю ў Rust пазбаўляюць распрацоўніка ад памылак пры маніпуляванні паказальнікамі і абараняюць ад праблем, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў, вынахад за межы буфера і да т.п. Для распаўсюджвання бібліятэк, забеспячэнні зборкі і кіраванні залежнасцямі праектам развіваецца пакетны мэнэджар Cargo. Для размяшчэння бібліятэк падтрымліваецца рэпазітар crates.io.
Бяспечная праца з памяццю забяспечваецца ў Rust падчас кампіляцыі праз праверку спасылак, адсочванне валодання аб'ектамі, улік часу жыцця аб'ектаў (вобласці бачнасці) і адзнаку карэктнасці доступу да памяці падчас выканання кода. Rust таксама дае сродкі для абароны ад цэлалікіх перапаўненняў, патрабуе абавязковай ініцыялізацыі значэнняў зменных перад выкарыстаннем, лепш апрацоўвае памылкі ў стандартнай бібліятэцы, ужывае канцэпцыю нязменнасці (immutable) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.
Асноўныя навіны:
- У пераліках з цэлалікавымі ўяўленнямі (атрыбутам «#[repr(Int)]») дазволена відавочнае ўказанне дыскрымінанта (нумары варыянту ў пераліку), нават калі пералік утрымлівае палі. #[repr(u8)] enum Foo { A(u8), # дыскрымінант 0 B(i8), # дыскрымінант 1 C(bool) = 42, # дыскрымінант 42 }
- Дададзена функцыя core::hint::black_box, якая проста вяртае назад прынятае значэнне. Бо кампілятар лічыць, што дадзеная функцыя выконвае вызначанае дзеянне, функцыю black_box можна выкарыстоўваць для адключэння аптымізацыі кампілятарам цыклаў пры правядзенні тэставання прадукцыйнасці кода або пры вывучэнні генераванага машыннага кода (каб кампілятар не палічыў код невыкарыстоўваным і не прыбраў яго). Напрыклад, у прыкладзе ніжэй указанне black_box(v.as_ptr()) не дазваляе кампілятару лічыць, што вектар v не выкарыстоўваецца. use std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
- У пакетным мэнэджары "cargo" прапанавана каманда "remove", якая дазваляе з каманднага радка выдаляць залежнасці з маніфеста Cargo.toml.
- У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны метады і рэалізацыі тыпажоў:
- proc_macro::Span::source_text
- u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
- i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
- i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
- BTreeSet::{first, last, pop_first, pop_last}
- BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
- Рэалізацыі Add AsFd для тыпаў блакіровак stdio пры ўжыванні WASI.
- impl TryFrom > для Box<[T; N]>
- core::hint::black_box
- Duration::try_from_secs_{f32,f64}
- Option::unzip
- std::os::fd
- У шаблонах дазволенае ўжыванне дыяпазонаў «..X» і «..=X».
- Пры зборцы фронтэнда кампілятара rustc і бэкенда LLVM задзейнічаны рэжымы аптымізацыі LTO (Link Time Optimization) і BOLT (Binary Optimization and Layout Tool), якія дазваляюць павялічыць прадукцыйнасць выніковага кода і зменшыць спажыванне памяці.
- Рэалізаваны трэці ўзровень падтрымкі для платформаў armv5te-none-eabi і thumbv5te-none-eabi. Трэці ўзровень мае на ўвазе базавую падтрымку, але без аўтаматызаванага тэсціравання, публікацыі афіцыйных зборак і праверкі магчымасці зборкі кода.
- Дададзена падтрымка звязвання з універсальнымі бібліятэкамі macOS.
Дадаткова можна адзначыць уключэнне ў кодавую базу GCC фронтэнда кампілятара мовы Rust (gccrs). Франтэнд уключаны ў галіну GCC 13, рэліз якой адбудзецца ў маі 2023 года. Пачынальна з GCC 13 штатны інструментар GCC зможа выкарыстоўвацца для кампіляцыі праграм на мове Rust без неабходнасці ўсталёўкі кампілятара rustc, пабудаванага з выкарыстаннем напрацовак LLVM. Рэалізацыя Rust у GCC 13 будзе мець статут бэта-версіі, не ўключанай па змаўчанні.
Крыніца: opennet.ru