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

Апублікаваны рэліз мовы праграмавання агульнага прызначэння Rust 1.58, заснаванага праектам Mozilla, але цяпер які развіваецца пад заступніцтвам незалежнай некамерцыйнай арганізацыі Rust Foundation. Мова сфакусаваная на бяспечнай працы з памяццю, забяспечвае аўтаматычнае кіраванне памяццю і дае сродкі для дасягнення высокага паралелізму выканання заданняў, пры гэтым абыходзячыся без выкарыстання зборшчыка смецця і runtime (runtime зводзіцца да базавай ініцыялізацыі і суправаджэнню стандартнай бібліятэкі).

Аўтаматычнае кіраванне памяццю ў Rust пазбаўляе распрацоўніка ад памылак пры маніпуляванні паказальнікамі і абараняе ад праблем, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў, вынахад за межы буфера і да т.п. Для распаўсюджвання бібліятэк, забеспячэнні зборкі і кіраванні залежнасцямі праектам развіваецца пакетны мэнэджар Cargo. Для размяшчэння бібліятэк падтрымліваецца рэпазітар crates.io.

Асноўныя навіны:

  • У блоках фарматавання радкоў, у дадатак да раней даступнай магчымасці падстаноўкі відавочна пералічаных пасля радка зменных па нумары і імені, рэалізавана магчымасць падстаноўкі адвольных ідэнтыфікатараў праз даданне ў радок выразаў "{ідэнтыфікатар}". Напрыклад: // Раней падтрымліваліся канструкцыі: println!(«Hello, {}!», get_person()); println!(«Hello, {0}!», get_person()); println!("Hello, {person}!", person = get_person()); // зараз можна паказваць let person = get_person(); println!(«Hello, {person}!»);

    Ідэнтыфікатары таксама можна ўказваць непасрэдна ў параметрах фарматавання. let (width, precision) = get_format(); для (name, score) in get_scores() { println!(«{name}: {score:width$.precision$}»); }

    Новая падстаноўка працуе ва ўсіх макрасах, якія падтрымліваюць вызначэнне фармату радка, за выключэннем макраса "panic!" у версіях мовы Rust 2015 і 2018, у якіх panic!(«{ident}») апрацоўваецца як звычайны радок (у Rust 2021 падстаноўка спрацоўвае).

  • Змененыя паводзіны структуры std::process::Command на платформе Windows, якая пры выкананні каманд з меркаванняў бяспекі больш не шукае выкананыя файлы ў бягучым каталогу. Бягучы каталог выключаны так як можа быць выкарыстаны для арганізацыі выканання кода зламысніка ў выпадку запуску праграм у каталогах, якія не заслугоўваюць даверу (CVE-2021-3013). Новая логіка вызначэння выкананых файлаў мае на ўвазе пошук у каталогах Rust, у каталогу прыкладання, сістэмным каталогу Windows і каталогах, указаных у зменнай асяроддзі PATH.
  • У стандартнай бібліятэцы пашырана колькасць функцый, пазначаных «#[must_use]» для вываду папярэджання ў выпадку ігнаравання значэння, якое дапамагае выявіць памылкі, выкліканыя здагадкай, што функцыя зменіць значэння, а не верне новае значэнне.
  • У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны метады і рэалізацыі тыпажоў:
    • Metadata::is_symlink
    • Path::is_symlink
    • {integer}::saturating_div
    • Option::unwrap_unchecked
    • Result::unwrap_unchecked
    • Result::unwrap_err_unchecked
  • Прыкмета "const", якая вызначае магчымасць выкарыстання ў любым кантэксце замест канстант, ужыты ў функцыях:
    • Duration::new
    • Duration::checked_add
    • Duration::saturating_add
    • Duration::checked_sub
    • Duration::saturating_sub
    • Duration::checked_mul
    • Duration::saturating_mul
    • Duration::checked_div
  • Дазволена разнайменне паказальнікаў "const T" у кантэкстах const.
  • У пакетным мэнэджары Cargo у метададзеныя пакеты дададзена поле rust_version, а ў каманду "cargo install" дададзена опцыя "-message-format".
  • У кампілятары рэалізавана падтрымка механізму абароны CFI (Control Flow Integrity), які дадае перад кожным ускосным выклікам функцыі праверкі для выяўлення некаторых формаў нявызначаных паводзінаў, якія патэнцыйна могуць прывесці да парушэння нармальнага парадку выканання (control flow) у выніку прымянення эксплоітаў, якія змяняюць указальнікі, якія захоўваюцца ў памяці. на функцыі.
  • У кампілятары дададзеная падтрымка 5 і 6 версіі фармату coverage-супастаўленняў LLVM, выкарыстоўванага для адзнакі ахопу кода пры тэставанні.
  • У кампілятары патрабаванні да мінімальнай версіі LLVM падняты да LLVM 12.
  • Рэалізаваны трэці ўзровень падтрымкі для платформы x86_64-unknown-none. Трэці ўзровень мае на ўвазе базавую падтрымку, але без аўтаматызаванага тэсціравання, публікацыі афіцыйных зборак і праверкі магчымасці зборкі кода.

Дадаткова можна адзначыць публікацыю кампаніяй Microsoft выпуску бібліятэк Rust for Windows 0.30, якія дазваляюць выкарыстоўваць мову Rust для распрацоўкі прыкладанняў для АС Windows. У набор уваходзяць два crate-пакета (windows і windows-sys), праз якія можна звяртацца да Win API у праграмах на мове Rust. Код для падтрымкі API генеруецца дынамічна з метададзеных з апісаннем API, што дазваляе рэалізаваць падтрымку не толькі ўжо існых выклікаў Win API, але выклікаў, якія з'явяцца ў будучыні. У новай версіі дададзена падтрымка мэтавай платформы UWP (Universal Windows Platform), рэалізаваны тыпажы Handle і Debug.

Крыніца: opennet.ru

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