Rust 1.73 programavimo kalbos leidimas

Paskelbtas „Mozilla“ projekto įkurtos, bet dabar globojamos nepriklausomos ne pelno organizacijos „Rust Foundation“ bendrosios paskirties programavimo kalbos „Rust 1.73“ leidimas. Kalba daugiausia dėmesio skiria atminties saugai ir suteikia galimybę pasiekti aukštą darbo lygiagretumą, vengiant šiukšlių rinktuvo ir vykdymo laiko (vykdymo laikas sumažinamas iki pagrindinės standartinės bibliotekos inicijavimo ir priežiūros).

„Rust“ atminties apdorojimo metodai apsaugo kūrėją nuo klaidų manipuliuojant rodyklėmis ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties tvarkymo, pvz., prieiga prie atminties srities ją atlaisvinus, nulinių rodyklių panaikinimas, buferio viršijimas ir kt. Siekiant platinti bibliotekas, teikti kūrimo ir valdyti priklausomybes, projektas sukuria krovinių paketų tvarkyklę. Crates.io saugykla palaikoma bibliotekų prieglobai.

Atminties sauga „Rust“ užtikrinama kompiliavimo metu, tikrinant nuorodas, stebint objekto nuosavybę, stebint objektų gyvavimo trukmę (apimtį) ir įvertinant prieigos prie atminties teisingumą vykdant kodą. Rust taip pat suteikia apsaugą nuo sveikųjų skaičių perpildymo, reikalauja, kad kintamieji būtų inicijuojami prieš naudojant, geriau tvarko klaidas standartinėje bibliotekoje, pagal numatytuosius nustatymus taiko nekintamų nuorodų ir kintamųjų koncepciją ir siūlo tvirtą statinį rašymą, kad būtų sumažintos loginės klaidos.

Pagrindinės naujovės:

  • Переработано оформление сообщений, выдаваемых применяемым по умолчанию обработчиком аварийного завершения программы (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(); }
  • Nauja API dalis buvo perkelta į stabiliųjų kategoriją, įskaitant stabilizuotus bruožų metodus ir įgyvendinimą:
    • 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
  • Atributas "const", kuris nustato galimybę jį naudoti bet kuriame kontekste vietoj konstantų, naudojamas funkcijose:
    • 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. Второй уровень поддержки подразумевает гарантию сборки.

Šaltinis: opennet.ru

Добавить комментарий