Апублікаваны рэліз мовы праграмавання Rust 1.99, заснаванага праектам Mozilla, але цяпер які развіваецца пад заступніцтвам незалежнай некамерцыйнай арганізацыі Rust Foundation. Мова сфакусаваная на бяспечнай працы з памяццю і дае сродкі для дасягнення высокага паралелізму выканання заданняў, пры гэтым абыходзячыся без выкарыстання зборшчыка смецця і runtime (runtime зводзіцца да базавай ініцыялізацыі і суправаджэння стандартнай бібліятэкі).
Метады працы з памяццю ў Rust накіраваны на выключэнне памылак пры маніпуляванні паказальнікамі і абарону ад праблем, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў, выхад за межы буфера і да т.п. Для распаўсюджвання бібліятэк, забеспячэнні зборкі і кіраванні залежнасцямі праектам развіваецца пакетны мэнэджар Cargo. Для размяшчэння бібліятэк падтрымліваецца рэпазітар crates.io.
Бяспечная праца з памяццю забяспечваецца ў Rust падчас кампіляцыі праз праверку спасылак, адсочванне валодання аб'ектамі, улік часу жыцця аб'ектаў (вобласці бачнасці) і адзнаку карэктнасці доступу да памяці падчас выканання кода. Rust таксама дае сродкі для абароны ад цэлалікіх перапаўненняў, патрабуе абавязковай ініцыялізацыі значэнняў зменных перад выкарыстаннем, лепш апрацоўвае памылкі ў стандартнай бібліятэцы, ужывае канцэпцыю нязменнасці (immutable) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.
Асноўныя навіны:
- Дадзена магчымасць стварэння на мове Rust функцый з пераменным лікам аргументаў (variadic), экспартуемых для выкліку з праектаў на мове Сі (C ABI). У якасці апошняга элемента спісу параметраў у падобных функцыях можа паказвацца канструкцыя "…", якая апрацоўваецца ў Rust пры дапамозе адмысловага тыпу VaList, які працуе аналагічна va_list у C. unsafe extern () }; let b = unsafe { args.next_arg:: () }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
- Стабілізаваны функцыі Layout::for_value_raw, mem::size_of_val_raw і mem::align_of_val_raw, якія дазваляюць бяспечна вызначаць памер і выраўноўванне па волкіх паказальніках (raw pointer), у тым ліку пры выкарыстанні тыпаў з дынамічным памерам, такіх як зрэзы, без неабходнасці.
- У дакументацыю дададзеная рэкамендацыя пазбягаць вызвалення памяці, на якую была атрымана статычная спасылка з неабмежаваным часам жыцця (&'static) праз выклік Box::leak (round-trip unleaking), бо падобнае дзеянне патэнцыйна можа прывесці да праблем з-за несумяшчальнасці з будучымі аптымізацыямі кампіціі. Замест стварэння статычнай спасылкі для часовай перадачы валодання рэкамендуецца выкарыстоўваць волкія паказальнікі, напрыклад, праз выклік Box::into_non_null.
- У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны метады і рэалізацыі тыпажоў:
- IntoIterator for Box<[T; N]>
- IntoIterator for &Box<[T; N]>
- IntoIterator for &mut Box<[T; N]>
- VecDeque::retain_back
- core::ffi::VaList
- Box::into_non_null
- Box::from_non_null
- Vec::into_parts
- Vec::from_parts
- core::mem::size_of_val_raw
- core::mem::align_of_val_raw
- core::alloc::Layout::for_value_raw
- String::from_utf8_lossy_owned
- string::FromUtf8Error::into_utf8_lossy
- FusedIterator for StepBy
- std::fs::set_times
- std::fs::set_times_nofollow
- У пакетным мэнэджары cargo рэалізаваны новы ўбудаваны профіль "debug", аналагічны профілі "dev" (у будучыні магчымасці для адладкі і распрацоўкі плануюць падзяліць). Пры зборцы ў CI па змаўчанні адключаная інкрыментальная кампіляцыя.
- Мэтавая платформа riscv64-unknown-linux-musl пераведзена на другі ўзровень падтрымкі, які мае на ўвазе гарантыю зборкі, але адсутнасць гарантый пры праходжанні тэставага набору.
Дадаткова можна адзначыць нядаўна анансаваныя праекты і падзеі, злучаныя з Rust:
- Кампанія Microsoft перавяла Rust у лік моў першага ўзроўня і забяспечыць яго поўную падтрымку на ўсіх этапах распрацоўкі ўсярэдзіне кампаній. Да гэтага першы ўзровень падтрымкі ўсярэдзіне кампаній падаваўся для моў C++, C# і TypeScript. Адзначаецца, што Rust ужо выкарыстоўваецца ў больш за 100 рэпазітарах Microsoft. Сярод іншага, кампаненты на Rust ужо прымяняюцца ў такіх прадуктах, як Microsoft 365 і Copilot, а для кампілятара MSVC падрыхтаваны асобны бэкенд rustc_codegen_utc для Rust, заснаваны на кампілятары rustc.
У якасці асноўнай мэты ўжывання Rust у Microsoft згадваецца ўзмацненне абароненасці кода, крытычнага з пункта гледжання бяспекі. Па словах тэхнічнага дырэктара Microsoft Azure каля 70% усіх уразлівасцяў у Windows выкліканыя праблемамі пры працы з памяццю, якіх можна пазбегнуць пры выкарыстанні Rust.
- Кампанія Google выдаліла з ядра Linux старую рэалізацыю механізму міжпрацэснага ўзаемадзеяння Binder, напісаную на мове Сі, у карысць новага драйвера Binder IPC, перапісанага на Rust. Адзначаецца, што за 15 гадоў існавання старога драйвера ў ім назапасіліся значны тэхнічны абавязак і багацце ўскладненняў, якія абцяжарвалі пошук памылак, суправаджэнне і даданне новых магчымасцяў. Драйвер Binder IPC на Rust прызнаны асноўным і больш не падаецца як эксперыментальная распрацоўка.
- Апублікаваны выпуск Arti 2.7.0, рэалізацыі інструментара Tor, напісанай на мове Rust. Калі код Arti дасягне ўзроўня, здольнага цалкам замяніць варыянт на Сі, распрацоўнікі Tor маюць намер надаць Arti статут асноўнай рэалізацыі Tor і паступова спыніць суправаджэнне рэалізацыі на Сі. У новай версіі пракладзена развіццё функцыянальнасці для рэлеяў і сервераў дырэкторый (Directory Authority), звязанай з парсінгам дакументаў, падтрымкай люстравання сервераў дырэкторый і апрацоўкай DNS-трафіку. Дададзена рэалізацыя RPC для змены і праверкі канфігурацыі. Ухілена некалькі ўразлівасцяў - адміністратарам onion-сэрвісаў рэкамендавана тэрмінова абнавіць свае сістэмы.
Крыніца: opennet.ru
