Rust 1.73 Programming Language Version

Yo te pibliye piblikasyon langaj pwogramasyon jeneral Rust 1.73, ki te fonde pa pwojè Mozilla, men kounye a devlope sou ejid òganizasyon endepandan ki pa pou pwofi Rust Foundation. Lang la konsantre sou sekirite memwa epi li bay mwayen pou reyalize gwo paralèl nan ekzekisyon travay, pandan y ap evite itilizasyon yon pèseptè fatra ak tan exécute (se redui tan an nan inisyalizasyon debaz ak antretyen nan bibliyotèk la estanda).

Teknik jesyon memwa Rust yo libere pwomotè a soti nan erè manipilasyon konsèy epi pwoteje kont pwoblèm ki rive nan manipilasyon memwa ki ba-nivo, tankou aksè apre-gratis, dereferans pointer nil, depase tanpon, ak lòt bagay. Pou distribye bibliyotèk, asire asanble ak jere depandans, pwojè a ap devlope manadjè pake kago. Repozitwa crates.io sipòte pou hosting bibliyotèk.

Sekirite memwa aplike nan Rust nan moman konpile atravè chèk referans, swiv pwopriyetè objè, konsiderasyon pou tout lavi objè (delimitasyon) ak evalyasyon aksè memwa nan tan exécution. Rust tou bay pwoteksyon kont debòde nonb antye relatif, mande pou valè varyab yo dwe inisyalize anvan yo itilize, gen pi bon manyen erè nan bibliyotèk estanda a, sèvi ak konsèp nan referans imuiabl ak varyab pa default, epi li ofri fò sezisman estatik pou minimize erè lojik.

Prensipal inovasyon:

  • Переработано оформление сообщений, выдаваемых применяемым по умолчанию обработчиком аварийного завершения программы (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<Cell<T>> и LocalKey<RefCell<T>> через использование методов get(), set(), take() и replace(), вместо использования замыкания «with(|inner| …)», что позволяет не выполнять дополнительный код инициализации для значений по умолчанию, указанных для новых потоков при помощи макроса «thread_local!». thread_local! { static THINGS: Cell<Vec<i32>> = Cell::new(Vec::new()); } fn f() { // было THINGS.with(|i| i.set(vec![1, 2, 3])); // стало THINGS.set(vec![1, 2, 3]); // … // было let v = THINGS.with(|i| i.take()); // стало let v: Vec<i32> = THINGS.take(); }
  • Yon nouvo pòsyon nan API a te transfere nan kategori ki estab, ki gen ladan metòd yo ak aplikasyon karakteristik yo:
    • 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::<Cell<T>>::get
    • LocalKey::<Cell<T>>::set
    • LocalKey::<Cell<T>>::take
    • LocalKey::<Cell<T>>::replace
    • LocalKey::<RefCell<T>>::with_borrow
    • LocalKey::<RefCell<T>>::with_borrow_mut
    • LocalKey::<RefCell<T>>::set
    • LocalKey::<RefCell<T>>::take
    • LocalKey::<RefCell<T>>::replace
  • Atribi "const", ki detèmine posiblite pou itilize li nan nenpòt kontèks olye pou yo konstan, yo itilize nan fonksyon yo:
    • 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-unknown-linux-ohos. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
  • Реализован второй уровень поддержки целевой платформы wasm32-wasi-preview1-threads. Второй уровень поддержки подразумевает гарантию сборки.

Sous: opennet.ru

Add nouvo kòmantè