Rust 1.73 Программалоо тили релиз

Mozilla долбоору тарабынан негизделген, бирок азыр Rust Foundation көз карандысыз коммерциялык эмес уюмунун демөөрчүлүгү астында иштелип чыккан Rust 1.73 жалпы максаттуу программалоо тилинин релизи жарыяланды. Бул тил эстутумдун коопсуздугуна көңүл бурат жана таштанды жыйгычты жана иштөө убактысын колдонуудан качуу менен жогорку жумуш параллелизмине жетүү үчүн каражаттарды камсыз кылат (иштөө убактысы стандарттык китепкананы негизги инициализацияга жана тейлөөгө чейин кыскарган).

Rust'тун эстутум менен иштөө ыкмалары иштеп чыгуучуну көрсөткүчтөрдү манипуляциялоодо каталардан куткарат жана эстутумдун төмөнкү деңгээлдеги иштөөсүнөн улам келип чыккан көйгөйлөрдөн коргойт, мисалы, эстутумдун аймагына ал бошотулгандан кийин жетүү, нөл көрсөткүчтөрдү шилтемеден чыгаруу, буфердин ашып кетиши ж.б. Китепканаларды жайылтуу, курууну камсыз кылуу жана көз карандылыкты башкаруу үчүн долбоор Cargo пакетинин менеджерин иштеп чыгат. crates.io репозиторий китепканаларды хостинг үчүн колдоого алынат.

Эстутумдун коопсуздугу Rust программасында компиляция убагында маалымдама текшерүү, объектке ээлик кылуу, объекттин иштөө мөөнөттөрүн (кошумчаларын) эсепке алуу жана кодду аткаруу учурунда эстутумга жетүүнүн тууралыгын баалоо аркылуу камсыз кылынат. Rust ошондой эле бүтүн сандардын ашып кетишинен коргоону камсыз кылат, колдонуудан мурун өзгөрмө маанилерин милдеттүү түрдө инициализациялоону талап кылат, стандарттык китепканада каталарды жакшыраак иштетет, өзгөрүлгүс шилтемелер жана өзгөрмөлөр концепциясын демейки боюнча колдонот, логикалык каталарды азайтуу үчүн күчтүү статикалык терүүнү сунуштайт.

Негизги инновациялар:

  • Переработано оформление сообщений, выдаваемых применяемым по умолчанию обработчиком аварийного завершения программы (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(); }
  • 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::<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
  • Аны константалардын ордуна каалаган контекстте колдонуу мүмкүнчүлүгүн аныктаган "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-unknown-linux-ohos. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
  • Реализован второй уровень поддержки целевой платформы wasm32-wasi-preview1-threads. Второй уровень поддержки подразумевает гарантию сборки.

Source: opennet.ru

Комментарий кошуу