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

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

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

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

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

  • Перапрацавана афармленне паведамленняў, якія выдаюцца прымяняюцца па змаўчанні апрацоўшчыкам аварыйнага завяршэння праграмы (panic). Тэкст, указаны ў макрасе "panic!" зараз паказваецца ў асобным радку без апраўлення двукоссямі, што спрашчае чытальнасць паведамлення і ўхіляе блытаніну пры наяўнасці ў укладзеных двукоссяў або падзелы на некалькі радкоў. fn main() { let file = "ferris.txt"; panic!(«oh no! {file:?} not found!»); } Было thread 'main' panicked at 'oh no! "ferris.txt" not found!', src/main.rs:3:5 Стала thread 'main' panicked at src/main.rs:3:5: oh no! "ferris.txt" not found!

    Таксама перапрацаваны вывад паведамленняў, якія паказваюцца пры спрацоўванні макрасаў "assert_eq" і "assert_ne". fn main() { assert_eq!("🦀", "🐟", "ferris is not a fish"); } Было thread 'main' panicked at 'assertion failed: `(left == right)` left: `»🦀»`, right: `»🐟»`: ferris is not a fish', src/main.rs:2 :5 Cтала thread 'main' panicked at src/main.rs:2:5: assertion `left == right` failed: ferris is not a fish left: "🦀" right: "🐟"

  • У адпаведнасці з RFC 3184 дададзена магчымасць прамой маніпуляцыі лакальнымі для струменя (thread_local) ключамі сховішчы LocalKey > і LocalKey > праз выкарыстанне метадаў get(), set(), take() і replace(), замест выкарыстання замыкання «with(|inner| …)», што дазваляе не выконваць дадатковы код ініцыялізацыі для значэнняў па змаўчанні, паказаных для новых струменяў пры дапамогі макраса «thread_local!». thread_local! { static THINGS: Cell > = Cell::new(Vec::new()); } fn f() { // было THINGS.with(|i| i.set(vec![32, 1, 2]))); // стала THINGS.set(vec![3, 1, 2]); // … // было let v = THINGS.with(|i| i.take()); // стала let v: Vec = THINGS.take(); }
  • У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны метады і рэалізацыі тыпажоў:
    • Unsigned {integer}::div_ceil
    • Unsigned {integer}::next_multiple_of
    • Unsigned {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::get
    • LocalKey:: >::set
    • LocalKey:: >::take
    • LocalKey:: >::replace
    • LocalKey:: >::with_borrow
    • LocalKey:: >::with_borrow_mut
    • LocalKey:: >::set
    • LocalKey:: >::take
    • LocalKey:: >::replace
  • Прыкмета "const", якая вызначае магчымасць выкарыстання ў любым кантэксце замест канстант, ужыты ў функцыях:
    • rc::Weak::new
    • sync::Weak::new
    • NonNull::as_ref
  • У кампілятары забяспечана запіс інфармацыі аб версіі ў секцыю ". Comment" па аналогіі з GCC і Clang.
  • Рэалізаваны трэці ўзровень падтрымкі для платформаў aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl і x86_64-unkn. Трэці ўзровень мае на ўвазе базавую падтрымку, але без аўтаматызаванага тэсціравання, публікацыі афіцыйных зборак і праверкі магчымасці зборкі кода.
  • Рэалізаваны другі ўзровень падтрымкі мэтавай платформы wasm32-wasi-preview1-threads. Другі ўзровень падтрымкі мае на ўвазе гарантыю зборкі.

Крыніца: opennet.ru

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