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

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

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

Бяспечная праца з памяццю забяспечваецца ў Rust падчас кампіляцыі праз праверку спасылак, адсочванне валодання аб'ектамі, улік часу жыцця аб'ектаў (вобласці бачнасці) і адзнаку карэктнасці доступу да памяці падчас выканання кода. Rust таксама дае сродкі для абароны ад цэлалікіх перапаўненняў, патрабуе абавязковай ініцыялізацыі значэнняў зменных перад выкарыстаннем, лепш апрацоўвае памылкі ў стандартнай бібліятэцы, ужывае канцэпцыю нязменнасці (immutable) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.

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

  • Для функцый async з Future::Output рэалізаваная магчымасць указання анатацый «#[must_use]», улучальных выснова папярэджання ў выпадку ігнаравання якое вяртаецца значэння, што дапамагае выявіць памылкі, выкліканыя здагадкай, што функцыя зменіць значэнні, а не верне новае значэнне. #[must_use] async fn bar() -> u32 { 0 } async fn caller() { bar().await; } warning: unused output of future returned by `bar` that must be used —> src/lib.rs:5:5 | 5 | bar().await; | ^^^^^^^^^^^ | = note: `#[warn(unused_must_use)]` on by default
  • Абноўлена рэалізацыя FIFO-чэргаў std::sync::mpsc (multi-producer single-consumer), якая пераведзена на выкарыстанне модуля crossbeam-channel з захаваннем ранейшага API. Новая рэалізацыя адрозніваецца рашэннем шэрагу праблем, больш высокай прадукцыйнасцю і спрашчэннем суправаджэння кода.
  • У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны метады і рэалізацыі тыпажоў:
    • {integer}::checked_ilog
    • {integer}::checked_ilog2
    • {integer}::checked_ilog10
    • {integer}::ilog
    • {integer}::ilog2
    • {integer}::ilog10
    • NonZeroU*::ilog2
    • NonZeroU*::ilog10
    • NonZero*::BITS
  • Прыкмета "const", якая вызначае магчымасць выкарыстання ў любым кантэксце замест канстант, ужыты ў функцыях:
    • char::from_u32
    • char::from_digit
    • char::to_digit
    • core::char::from_u32
    • core::char::from_digit
  • Рэалізаваны трэці ўзровень падтрымкі для выкарыстання Rust у ядры Linux (linuxkernel), а таксама для платформаў Sony PlayStation 1 (mipsel-sony-psx), PowerPC з AIX (powerpc64-ibm-aix), QNX Neutrino RTOS (aarch64-unknown-nto- qnx710, x86_64-pc-nto-qnx710). Трэці ўзровень мае на ўвазе базавую падтрымку, але без аўтаматызаванага тэсціравання, публікацыі афіцыйных зборак і праверкі магчымасці зборкі кода.

Дадаткова можна адзначыць публікацыю кампаніяй ARM патчаў, якія дазваляюць выкарыстоўваць мову Rust для распрацоўкі драйвераў і модуляў ядра Linux, якія збіраюцца для сістэм на базе архітэктуры AArch64.

Крыніца: opennet.ru

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