Kutolewa kwa lugha ya programu ya kutu 1.34

Lugha ya programu ya mfumo Rust 1.34, iliyotengenezwa na mradi wa Mozilla, imetolewa. Lugha inazingatia usalama wa kumbukumbu, hutoa usimamizi wa kumbukumbu otomatiki, na hutoa njia ya kufikia usawa wa juu wa kazi bila kutumia mtoza takataka au wakati wa kukimbia.

Udhibiti wa kumbukumbu otomatiki wa Rust humkomboa msanidi programu dhidi ya udanganyifu wa vielelezo na hulinda dhidi ya matatizo yanayotokana na uchezaji kumbukumbu wa kiwango cha chini, kama vile ufikiaji wa kumbukumbu baada ya bila malipo, vielekezi visivyofaa vya vielelezo, ziada ya bafa, na kadhalika. Ili kusambaza maktaba, hakikisha kusanyiko na kudhibiti utegemezi, mradi unatengeneza meneja wa kifurushi cha Cargo, ambayo hukuruhusu kupata maktaba zinazohitajika kwa programu kwa mbofyo mmoja. Hazina ya crates.io inatumika kwa kupangisha maktaba.

Ubunifu kuu:

  • Zana zilizoongezwa kwa msimamizi wa kifurushi cha Cargo ili kufanya kazi na sajili mbadala za kifurushi ambazo zinaweza kuwa pamoja na sajili ya umma ya crates.io. Kwa mfano, wasanidi programu wa kibinafsi sasa wanaweza kutumia sajili yao ya kibinafsi ambayo inaweza kutumika wakati wa kuorodhesha vitegemezi katika Cargo.toml na kutumia muundo wa toleo sawa na crates.io kwa bidhaa zao, na pia kurejelea crates.io na crates.io katika utegemezi. kwa usajili wako mwenyewe.

    Kuongeza sajili ya nje kwa ~/.cargo/config
    chaguo jipya la "sajili yangu" limetolewa katika sehemu ya "[rejesta]", na chaguo la "kreti nyingine" limeongezwa ili kutaja sajili ya nje katika vitegemezi katika Cargo.toml katika sehemu ya "[tegemezi]". Ili kuunganisha kwenye sajili ya ziada, weka tu tokeni ya uthibitishaji kwenye ~/.cargo/credentials faili na utekeleze amri.
    "kuingia kwa mizigo --registry=my-registry", na kuchapisha kifurushi -
    "cargo publish --registry=my-registry";

  • Imeongeza usaidizi kamili wa kutumia opereta "?". katika mafundisho, ambayo hukuruhusu kutumia nambari ya mfano kutoka kwa hati kama majaribio. Opereta hapo awali
    "?" inaweza kutumika kushughulikia makosa wakati wa utekelezaji wa jaribio ikiwa tu kulikuwa na chaguo za kukokotoa za "fn kuu()" au katika vitendakazi vya "#[test]";

  • Katika sifa maalum zinazofafanuliwa kwa kutumia macros za kiutaratibu, inawezekana kutumia seti kiholela za tokeni (β€œ#[attr($tokens)]”, β€œ#[attr[$tokens]] na #[attr{$tokens}]”) . Hapo awali, vipengee viliweza kubainishwa tu katika muundo wa mti/mrudisho kwa kutumia maandishi ya mfuatano, kwa mfano β€œ#[foo(bar, baz(quux, foo = β€œbar”))]”, lakini sasa inawezekana kutumia hesabu (' #[range(0. .10)]') na miundo kama vile β€œ#[bound(T: MyTrait)]”;
  • Sifa za TryFrom na TryInto zimeimarishwa, na kuruhusu ubadilishaji wa aina na kushughulikia makosa. Kwa mfano, mbinu kama vile from_be_bytes zenye aina kamili hutumia safu kama ingizo, lakini data mara nyingi huja katika aina ya Kipande, na kubadilisha kati ya safu na vipande ni tatizo kufanya wewe mwenyewe. Kwa usaidizi wa sifa mpya, operesheni iliyobainishwa inaweza kufanywa kwa kuruka kupitia simu kwa .try_into(), kwa mfano, "let num = u32::from_be_bytes(slice.try_into()?)". Kwa ubadilishaji unaofaulu kila wakati (kwa mfano, kutoka aina ya u8 hadi u32), aina ya hitilafu isiyoweza Kukosekana imeongezwa ili kuruhusu matumizi ya uwazi ya
    TryFrom kwa utekelezaji wote uliopo wa "Kutoka";

  • Iliacha kufanya kazi ya CommandExt::before_exec, ambayo iliruhusu utekelezaji wa kidhibiti kabla ya utekelezaji ambao ulitekelezwa katika muktadha wa mchakato wa mtoto kugawanywa baada ya fork() simu. Chini ya hali kama hizi, baadhi ya nyenzo za mchakato wa mzazi, kama vile maelezo ya faili na maeneo ya kumbukumbu yaliyopangwa, zinaweza kurudiwa, ambayo inaweza kusababisha tabia isiyobainishwa na utendakazi usio sahihi wa maktaba.
    Badala ya before_exec, inashauriwa kutumia chaguo la kukokotoa lisilo salama CommandExt::pre_exec.

  • Aina kamili za atomiki zilizotiwa saini na ambazo hazijatiwa saini kuanzia ukubwa wa biti 8 hadi 64 (kwa mfano, AtomicU8), pamoja na aina zilizotiwa saini za NonZeroI[8|16|32|54|128].
  • Sehemu mpya ya API imehamishwa hadi kwenye kategoria ya thabiti, ikijumuisha mbinu Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Papo hapo::checked_[ongeza |sub] na SystemTime zimeimarishwa ::checked_[ongeza|sub]. Utendaji wa iter::from_fn na iter::successors umeimarishwa;
  • Kwa aina zote kamili, mbinu za checked_pow, saturating_pow, wrapping_pow, na overflowing_pow zinatekelezwa;
  • Imeongeza uwezo wa kuwezesha uboreshaji katika hatua ya kuunganisha kwa kubainisha chaguo la kujenga "-C linker-plugin-lto" (rustc inakusanya msimbo wa kutu katika bitcode ya LLVM, ambayo inaruhusu uboreshaji wa LTO kutumika).

Chanzo: opennet.ru

Kuongeza maoni