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