Апублікаваны рэліз мовы праграмавання агульнага прызначэння Rust 1.65, заснаванага праектам Mozilla, але цяпер які развіваецца пад заступніцтвам незалежнай некамерцыйнай арганізацыі Rust Foundation. Мова сфакусаваная на бяспечнай працы з памяццю і дае сродкі для дасягнення высокага паралелізму выканання заданняў, пры гэтым абыходзячыся без выкарыстання зборшчыка смецця і runtime (runtime зводзіцца да базавай ініцыялізацыі і суправаджэння стандартнай бібліятэкі).
Метады працы з памяццю ў Rust пазбаўляюць распрацоўніка ад памылак пры маніпуляванні паказальнікамі і абараняюць ад праблем, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў, вынахад за межы буфера і да т.п. Для распаўсюджвання бібліятэк, забеспячэнні зборкі і кіраванні залежнасцямі праектам развіваецца пакетны мэнэджар Cargo. Для размяшчэння бібліятэк падтрымліваецца рэпазітар crates.io.
Бяспечная праца з памяццю забяспечваецца ў Rust падчас кампіляцыі праз праверку спасылак, адсочванне валодання аб'ектамі, улік часу жыцця аб'ектаў (вобласці бачнасці) і адзнаку карэктнасці доступу да памяці падчас выканання кода. Rust таксама дае сродкі для абароны ад цэлалікіх перапаўненняў, патрабуе абавязковай ініцыялізацыі значэнняў зменных перад выкарыстаннем, лепш апрацоўвае памылкі ў стандартнай бібліятэцы, ужывае канцэпцыю нязменнасці (immutable) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.
Асноўныя навіны:
- Дададзена падтрымка абагульненых асацыіраваных тыпаў (GAT, Generic Associated Types), якія даюць магчымасць ствараць псеўданімы тыпаў, асацыіраваныя з іншым тыпам, і якія дазваляюць звязваць канструктары тыпаў з тыпажамі. trait Foo {type Bar<'x>; }
- Рэалізаваны выраз «let … else», які дазваляе правяраць умову адпаведнасці шаблону непасрэдна ўсярэдзіне выразаў «let» і выконваць адвольны код, калі шаблон не супадае. let Ok(count) = u64::from_str(count_str) else { panic!(«Can't parse integer: '{count_str}'»); };
- Дазволена выкарыстанне выразы break для заўчаснага выйсця з найменных блокаў, выкарыстаючы імя блока (пазнаку) для вызначэння завершанага блока. let result = 'block: { do_thing(); if condition_not_met() { break 'block 1; } do_next_thing(); if condition_not_met() { break 'block 2; } do_last_thing(); 3 };
- Для Linux дададзена магчымасць паасобнага захавання адладкавай інфармацыі (split-debuginfo), раней даступная толькі для платформы macOS. Пры ўказанні опцыі "-Csplit-debuginfo=unpacked" дадзеныя debuginfo у фармаце DWARF будуць захаваны ў некалькі асобных аб'ектных файлаў з пашырэннем ".dwo". Пры ўказанні "-Csplit-debuginfo=packed" будзе створаны адзін пакет у фармаце ".dwp", які ўключае ўсе дадзеныя debuginfo для праекта. Для інтэграцыі debuginfo непасрэдна ў секцыю .debug_* ELF-аб'ектаў можна выкарыстоўваць опцыю "-Csplit-debuginfo=off".
- У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны метады і рэалізацыі тыпажоў:
- std::backtrace::Backtrace
- Bound::as_ref
- std::io::read_to_string
- <*const T>::cast_mut
- <*mut T>::cast_const
- Прыкмета "const", вызначальны магчымасць выкарыстання ў любым кантэксце замест канстант, ужыты ў функцыях <*const T&>::offset_from і <*mut T>::offset_from
- У рамках фінальнай стадыі перакладу рэалізацыі пратаколу LSP (Language Server Protocol) на rust-analyzer, састарэлая рэалізацыя Rust Language Server (RLS) заменена на сервер-заглушку, які выдае папярэджанне з прапановай перайсці на выкарыстанне rust-analyzer.
- Пры кампіляцыі ўключана падтрымка inline-разгортвання прамежкавага кода MIR, якая прыводзіць да паскарэння кампіляцыі тыпавых crate-пакетаў на 3-10%.
- Для паскарэння зборак па раскладзе ў пакетным мэнэджары Cargo забяспечана сартаванне прац, якія чакаюць выкананні ў чарзе.
Дадаткова можна адзначыць інтэрв'ю аб ужыванні мовы Rust у кампаніі Volvo для распрацоўкі кампанентаў аўтамабільных інфармацыйных сістэм. Ужо існуючы і пратэставаны код перапісваць на Rust не плануюць, але для новага кода Rust з'яўляецца адным з пераважных варыянтаў для павышэння якасці з меншымі выдаткамі. Звязаныя з выкарыстаннем мовы Rust працоўныя групы таксама створаны ў аўтамабільных аб'яднаннях AUTOSAR (AUTomotive Open System ARchitecture) і SAE (Society of Automotive Engineers).
Акрамя таго, Дэвід Клейдэрмахер (David Kleidermacher), віцэ-прэзідэнт Google па інжынірынгу, распавёў аб перакладзе на мову Rust кода, які выкарыстоўваецца ў платформе Android для кіравання ключамі шыфравання, а таксама прымяненні Rust у рэалізацыі пратаколу DNS over HTTPS, у стэку для UWB- чыпаў (Ultra-Wideband) і ва ўрэймворку віртуалізацыі (Android Virtualization Framework), звязаным з чыпам Tensor G2. Для Android таксама развіваюцца новыя стэкі для Bluetooth і Wi-Fi, перапісаныя на мове Rust. Агульная стратэгія заключаецца ў паступовым узмацненні абароны спачатку праз перавод на выкарыстанне Rust найбольш неабароненых і жыццёва важных праграмных кампанентаў, а затым ахопліваючы і іншыя звязаныя з імі падсістэмы. У мінулым годзе мова Rust была ўключана ў лік моў, дапушчальных для распрацоўкі платформы Android.
Крыніца: opennet.ru