Выпуск мовы праграмавання Rust 1.65

Апублікаваны рэліз мовы праграмавання агульнага прызначэння 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

Дадаць каментар