Kutolewa kwa lugha ya programu ya kutu 1.36

iliyochapishwa kutolewa kwa lugha ya programu ya mfumo Kutu 1.36, iliyoanzishwa na mradi wa Mozilla. 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 huokoa msanidi programu dhidi ya vielelezo vya kudhibiti na hulinda dhidi ya matatizo yanayotokana na uchezaji wa kumbukumbu ya kiwango cha chini, kama vile kufikia eneo la kumbukumbu baada ya kuachiliwa, kuondoa marejeleo ya viashiria, utiririshaji wa bafa, n.k. Ili kusambaza maktaba, hakikisha kukusanya na kudhibiti utegemezi, mradi huunda msimamizi wa kifurushi Cargo, ambayo hukuruhusu kupata maktaba unayohitaji kwa programu hiyo kwa mbofyo mmoja. Hifadhi inaauniwa kwa kupangisha maktaba crates.io.

kuu ubunifu:

  • Tabia imetulia Baadaye, ambayo inawakilisha thamani ambayo tathmini yake bado inaweza kukamilika wakati wa kutumia vizuizi vya async / .await. Maadili ya Asynchronous yaliyofafanuliwa kwa kutumia Future hufanya iwezekanavyo kuendelea kutekeleza kazi muhimu kwenye thread, wakati huo huo kusubiri kukamilika kwa mahesabu ya thamani fulani;
  • Maktaba imeimarishwa alloc, ambayo hutoa viashiria mahiri na mikusanyiko ya kudhibiti thamani zilizogawiwa kumbukumbu. Ugawaji wa kumbukumbu katika std sasa hutumia aina Kitu, ambazo zinasafirishwa tena kutoka kwa alloc. Matumizi tofauti ya alloc yana mantiki katika programu zisizofungamana na std (β€œ#![no_std]”), na pia katika maktaba zilizoundwa kwa ajili ya matumizi katika programu sawa bila std;
  • Ili kukwepa ukaguzi wa uanzishaji sahihi wa maadili iliyopendekezwa aina ya kati Labda Kitengo, ambayo inaweza kutumika badala ya mem::tendakazi isiyo na unitialized kama mbadala salama. Chaguo za kukokotoa za mem::zisizozinduliwa ni rahisi kwa kuunda safu kwa haraka, lakini hupotosha mkusanyaji kwa sababu inaonekana kuanzishwa, lakini kwa kweli thamani inasalia kuwa haijaanzishwa. LabdaUninit hukuruhusu kuonyesha kwa uwazi kwa mkusanyaji kwamba thamani haijaanzishwa, kuzingatia tabia inayowezekana ambayo haijafafanuliwa inayohusishwa na hii, na pia kupanga ukaguzi katika programu kupitia "labda_t:" na uanzishaji wa hatua kwa hatua, kuashiria kukamilika kwake. kwa kutumia simu ya β€œ.assume_init()”. Pamoja na ujio wa MaybeUninit, kitendakazi cha mem::isioanzishwa kimeacha kutumika na hakipendekezwi kwa matumizi;
  • Mbinu ya NLL (Non-Lexical Lifetimes), iliyopanua mfumo wa kurekodi maisha ya vigeu vilivyokopwa, imeimarishwa kwa lugha ya Rust 2015 (awali, NLL iliungwa mkono na Rust 2018 pekee). Badala ya kutekeleza maisha yote katika kiwango cha kileksika, NLL hufanya hivyo katika kiwango cha seti ya viashiria kwenye grafu ya mtiririko wa utekelezaji. Njia hii inakuwezesha kuongeza ubora wa kuangalia ukopaji wa vigezo (kuangalia kukopa) na kuruhusu utekelezaji wa aina fulani za kanuni sahihi, matumizi ambayo hapo awali yalisababisha kosa. Tabia mpya pia hurahisisha utatuzi;
  • Utekelezaji mpya wa safu za ushirika pamoja HashMap, kulingana na matumizi ya muundo Jedwali la Uswisi (imepakiwa kiotomatiki hashbrown::HashMap, isipokuwa imeelezwa vinginevyo, kama vile std::HashMap, ambayo msingi wake ni SipHash 1-3). Kiolesura cha programu kinaendelea kuwa sawa, na tofauti zinazoonekana kwa msanidi programu hupungua hadi utendaji ulioongezeka na kupunguza matumizi ya kumbukumbu;
  • Katika mizigo meneja wa mfuko aliongeza chaguo "--offline", ambayo huwezesha uendeshaji bila kufikia mtandao, ambayo vifurushi tu vilivyohifadhiwa kwenye mfumo wa ndani hutumiwa wakati wa kusakinisha vitegemezi. Ikiwa utegemezi hauko kwenye kache ya ndani, hitilafu itatupwa. Ili kupakia mapema vitegemezi kwenye akiba ya ndani kabla ya kwenda nje ya mtandao, unaweza kutumia amri ya "kuchukua shehena";
  • Imetekelezwa uwezo wa kuita jumla "dbg!" kuonyesha hoja kadhaa;
  • Sifa ya "const", ambayo huamua uwezekano wa kutumia katika muktadha wowote badala ya mara kwa mara, hutumiwa kwa njia.
    Mpangilio::kutoka_sawa_align_haijachaguliwa,
    mem::inahitaji_kushuka,
    NonNnull::ning'inia na
    NonNnull ::cast;

  • Sehemu mpya ya API imehamishiwa kwenye kategoria thabiti, ikijumuisha mbinu ambazo zimeimarishwa
    kazi::Waker, kazi::Kura,
    VecDeque::zungusha_kushoto, VecDeque::zungusha_kulia,
    Soma::soma_vectored, Andika::write_vectored,
    Iterator::imenakiliwa,
    BorrowMut (kwa masharti) na str::as_mut_ptr.

Chanzo: opennet.ru

Kuongeza maoni