Mozilla долбоору тарабынан негизделген, бирок азыр Rust Foundation көз карандысыз коммерциялык эмес уюмунун демөөрчүлүгү астында иштелип чыккан Rust 1.80 жалпы максаттуу программалоо тилинин релизи жарыяланды. Бул тил эстутумдун коопсуздугуна көңүл бурат жана таштанды жыйгычты жана иштөө убактысын колдонуудан качуу менен жогорку жумуш параллелизмине жетүү үчүн каражаттарды камсыз кылат (иштөө убактысы стандарттык китепкананы негизги инициализацияга жана тейлөөгө чейин кыскарган).
Rust'тун эстутум менен иштөө ыкмалары иштеп чыгуучуну көрсөткүчтөрдү манипуляциялоодо каталардан куткарат жана эстутумдун төмөнкү деңгээлдеги иштөөсүнөн улам келип чыккан көйгөйлөрдөн коргойт, мисалы, эстутумдун аймагына ал бошотулгандан кийин жетүү, нөл көрсөткүчтөрдү шилтемеден чыгаруу, буфердин ашып кетиши ж.б. Китепканаларды жайылтуу, курууну камсыз кылуу жана көз карандылыкты башкаруу үчүн долбоор Cargo пакетинин менеджерин иштеп чыгат. crates.io репозиторий китепканаларды хостинг үчүн колдоого алынат.
Эстутумдун коопсуздугу Rust программасында компиляция убагында маалымдама текшерүү, объектке ээлик кылуу, объекттин иштөө мөөнөттөрүн (кошумчаларын) эсепке алуу жана кодду аткаруу учурунда эстутумга жетүүнүн тууралыгын баалоо аркылуу камсыз кылынат. Rust ошондой эле бүтүн сандардын ашып кетишинен коргоону камсыз кылат, колдонуудан мурун өзгөрмө маанилерин милдеттүү түрдө инициализациялоону талап кылат, стандарттык китепканада каталарды жакшыраак иштетет, өзгөрүлгүс шилтемелер жана өзгөрмөлөр концепциясын демейки боюнча колдонот, логикалык каталарды азайтуу үчүн күчтүү статикалык терүүнү сунуштайт.
Негизги инновациялар:
- Кошулган LazyCell жана LazyLock түзүмдөрү, алар биринчи мүмкүнчүлүккө чейин берилиштерди инициализациялоону кийинкиге калтырууга мүмкүндүк берет (башкаруу функциясы мааниге кирүүгө аракет кылганда чакырылат). LazyLock LazyCellден көп жиптүү коддо колдонуу үчүн синхрондоштуруу каражаттарын колдоо менен айырмаланат. колдонуу std::sync::LazyLock; use std::time::Instant; статикалык LAZY_TIME: LazyLock = LazyLock::new(Instant::азыр); fn main() { баштайлы = Ыкчам ::азыр(); std::thread::scope(|s| { s.spawn(|| { println!("Жиптин жалкоо убактысы {:?}", LAZY_TIME.duration_sice(start)); }); println!("Негизги жалкоо time is {:?}", LAZY_TIME.duration_sice(start)); }
- Rustc компилятору "--check-cfg" опциясын турукташтырды, ал пакет менеджеринде cfg аркылуу көрсөтүлгөн бардык аталыштарды жана баалуулуктарды, анын ичинде Cargo.toml атын текшерүү үчүн колдонулат. fn main() { println!("Салам, дүйнө!"); #[cfg(feature = "crayon")] rayon::join( || println!("Салам, Биринчи нерсе!"), || println!("Салам, Экинчи нерсе!"), ); } эскертүү: күтүлбөгөн "cfg" шартынын мааниси: "карандаш" —> src/main.rs:4:11 | 4 | #[cfg(feature = "карандаш")] | ^^^^^^^^^^——— | | | жардам: окшош ат менен күтүлгөн маани бар: `»район»`
- Калыптар диапазондорду "a..b" жана "..b" форматтарында көрсөтүүгө мүмкүндүк берет, алар Range жана RangeTo туюнтмаларын колдонууга окшош. pub fn size_prefix(n: u32) -> &'static str {const K: u32 = 10u32.pow(3); const M: u32 = 10u32.pow(6); const G: u32 = 10u32.pow(9); дал келүү n { ..K => "", K..M => "k", M..G => "M", G.. => "G", } }
- API'нин жаңы бөлүгү туруктуу категорияга жылдырылды, анын ичинде сапаттардын ыкмалары жана ишке ашырылышы турукташтырылды:
- impl Rc үчүн демейки
- impl Rc үчүн демейки
- impl Rc<[T]> үчүн Демейки
- impl Arc үчүн демейки
- impl Arc үчүн демейки
- impl Arc<[T]> үчүн Демейки
- impl IntoIterator for Box<[T]>
- impl FromIterator for Box
- impl FromIterator куту үчүн
- LazyCell
- LazyLock
- Duration::div_duration_f32
- Duration::div_duration_f64
- Option::take_if
- Seek::seek_relative
- BinaryHeap::as_slice
- NonNull::offset
- NonNull::byte_offset
- NonNull::add
- NonNull::byte_add
- NonNull::sub
- NonNull::byte_sub
- NonNull::offset_from
- NonNull::byte_offset_from
- NonNull::read
- NonNull::read_volatile
- NonNull::read_unaligned
- NonNull::write
- NonNull::write_volatile
- NonNull::write_unaligned
- NonNull::write_bytes
- NonNull::copy_to
- NonNull::copy_to_nonoverlapping
- NonNull::copy_from
- NonNull::copy_from_nonoverlapping
- NonNull::replace
- NonNull::swap
- NonNull::drop_in_place
- NonNull::align_offset
- <[T]>::split_at_checked
- <[T]>::split_at_mut_checked
- str::split_at_checked
- str::split_at_mut_checked
- str::trim_ascii
- str::trim_ascii_start
- str::trim_ascii_end
- <[u8]>::trim_ascii
- <[u8]>::trim_ascii_start
- <[u8]>::trim_ascii_end
- IPv4Addr::BITS
- Ipv4Addr::to_bits
- Ipv4Addr::from_bits
- IPv6Addr::BITS
- Ipv6Addr::to_bits
- Ipv6Addr::from_bits
- Vec::<[T; N]>::into_flattened
- <[[ T; N]]>::as_flattened
- <[[ T; N]]>::as_flattened_mut
- Аны константалардын ордуна каалаган контекстте колдонуу мүмкүнчүлүгүн аныктаган "const" атрибуту функцияларда колдонулат:
- <[T]>::last_chunk
- BinaryHeap::new
- Колдоонун үчүнчү деңгээли x86_64-unknown-linux-none платформасы үчүн ишке ашырылган. Үчүнчү деңгээл негизги колдоону камтыйт, бирок автоматташтырылган тестирлөөсүз, расмий түзүмдөрдү жарыялоосуз же кодду курууга болорун текшерүүсүз.
Source: opennet.ru
