Kutolewa kwa lugha ya programu ya kutu 1.66

Lugha ya programu ya madhumuni ya jumla Rust 1.66, iliyoanzishwa na mradi wa Mozilla lakini sasa imeendelezwa chini ya ufadhili wa shirika huru lisilo la faida la Rust Foundation, imetolewa. Lugha inazingatia usimamizi salama wa kumbukumbu na hutoa njia za kufikia usawa wa juu wa kazi huku ikiepuka matumizi ya mtoaji wa takataka na wakati wa kukimbia (muda wa kukimbia umepunguzwa kuwa uanzishaji wa kimsingi na matengenezo ya maktaba ya kawaida).

Mbinu za utunzaji wa kumbukumbu za kutu huokoa msanidi programu kutokana na hitilafu wakati wa kuendesha viashiria na kulinda dhidi ya matatizo yanayotokea kutokana na utunzaji wa kumbukumbu wa kiwango cha chini, kama vile kufikia eneo la kumbukumbu baada ya kuachiliwa, kuondoa marejeleo ya viashiria visivyofaa, utiririshaji wa bafa, n.k. Ili kusambaza maktaba, kutoa miundo na kudhibiti utegemezi, mradi huunda msimamizi wa kifurushi cha Cargo. Hazina ya crates.io inatumika kwa kupangisha maktaba.

Usalama wa kumbukumbu hutolewa katika Rust wakati wa kukusanya kupitia kukagua marejeleo, kufuatilia umiliki wa kitu, kufuatilia muda wa maisha ya kitu (wigo), na kutathmini usahihi wa ufikiaji wa kumbukumbu wakati wa utekelezaji wa nambari. Kutu pia hutoa ulinzi dhidi ya mafuriko kamili, inahitaji uanzishaji wa lazima wa maadili tofauti kabla ya matumizi, hushughulikia makosa vyema katika maktaba ya kawaida, hutumia dhana ya marejeleo yasiyobadilika na vigeu kwa chaguo-msingi, hutoa uchapaji thabiti wa tuli ili kupunguza makosa ya kimantiki.

Ubunifu kuu:

  • Katika hesabu zilizo na uwakilishi kamili (sifa ya "#[repr(Int)]"), kiashiria dhahiri cha kibaguzi (idadi ya chaguo katika hesabu) inaruhusiwa, hata kama hesabu ina sehemu. #[repr(u8)] enum Foo { A(u8), # kibaguzi 0 B(i8), # kibaguzi 1 C(bool) = 42, # kibaguzi 42 }
  • Kiini kilichoongezwa::dokezo::kitendakazi cheusi_kisanduku, ambacho hurejesha tu thamani iliyopokelewa. Kwa sababu mkusanyaji anaamini kuwa kazi fulani hufanya jambo maalum, kazi ya black_box inaweza kutumika kulemaza uboreshaji wa mkusanyaji wa vitanzi wakati wa kufanya majaribio ya utendakazi wa msimbo au wakati wa kukagua nambari ya mashine inayozalishwa (ili mkusanyaji asizingatie msimbo kuwa hauwezi kutumika na kuondoa. hiyo). Kwa mfano, katika mfano ulio hapa chini, kubainisha black_box(v.as_ptr()) huzuia mkusanyaji kudhani kuwa vekta v haitumiki. tumia std::dokezo::sanduku_nyeusi; fn push_cap(v: &mut Vec) { for i in 0..4 {v.push(i); black_box(v.as_ptr()); }}
  • Meneja wa kifurushi "mizigo" hutoa amri ya "ondoa", ambayo inakuwezesha kuondoa utegemezi kutoka kwa onyesho la Cargo.toml kutoka kwa mstari wa amri.
  • Sehemu mpya ya API imehamishwa hadi kwa kitengo cha uthabiti, ikijumuisha mbinu na utekelezaji wa sifa zimeimarishwa:
    • proc_macro::Span::chanzo_text
    • u*::{imetiwa saini_ongeza_imetiwa saini, imefurika_ongeza_imetiwa saini, saturating_add_signed, wrapping_add_signed}
    • i*::{imechaguliwa_ongeza_haina saini, kufurika_ongeza_isiyotiwa saini, kueneza_kuongeza_hakuna saini, kufunga_kuongeza_hakuna saini}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{kwanza, mwisho, pop_kwanza, pop_last}
    • BTreeMap::{thamani_ya_ya_kwanza, thamani_ya_msimbo_wa_mwisho, ingizo_la_kwanza, ingizo_la_mwisho, pop_kwanza, pop_last}
    • Ongeza utekelezaji wa AsFd kwa aina za kufuli za stdio unapotumia WASI.
    • impl TryFrom> for Box
    • msingi::dokezo::sanduku_nyeusi
    • Muda::try_from_secs_{f32,f64}
    • Chaguo::fungua unzip
    • std::os::fd
  • Matumizi ya safu "..X" na "..=X" inaruhusiwa katika violezo.
  • Wakati wa kukusanya sehemu ya mbele ya mkusanyaji wa rustc na nyuma ya LLVM, njia za uboreshaji LTO (Uboreshaji wa Wakati wa Kiungo) na BOLT (Zana ya Uboreshaji wa Binary na Mpangilio) hutumiwa, ambayo inaruhusu kuongeza utendaji wa msimbo unaosababisha na kupunguza matumizi ya kumbukumbu.
  • Kiwango cha tatu cha usaidizi kimetekelezwa kwa majukwaa ya armv5te-none-eabi na thumbv5te-none-eabi. Kiwango cha tatu kinahusisha usaidizi wa kimsingi, lakini bila majaribio ya kiotomatiki, uchapishaji wa miundo rasmi, au kuangalia ikiwa msimbo unaweza kutengenezwa.
  • Msaada ulioongezwa wa kuunganishwa na maktaba za ulimwengu za macOS.

Zaidi ya hayo, tunaweza kutambua kujumuishwa kwa sehemu ya mbele ya mkusanyaji wa lugha ya Rust (gccrs) katika msingi wa msimbo wa GCC. Sehemu ya mbele imejumuishwa katika tawi la GCC 13, ambalo litatolewa Mei 2023. Kuanzia na GCC 13, zana asilia za GCC zinaweza kutumika kukusanya programu katika lugha ya Rust bila hitaji la kusakinisha kikusanya rustc, kilichojengwa kwa kutumia maendeleo ya LLVM. Utekelezaji wa GCC 13 wa Rust utakuwa toleo la beta, ambalo halitawezeshwa na chaguo-msingi.

Chanzo: opennet.ru

Kuongeza maoni