Kutolewa kwa lugha ya programu ya kutu 1.38

iliyochapishwa kutolewa kwa lugha ya programu ya mfumo Kutu 1.38, 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:

  • Imeongeza modi ya ujumuishaji wa bomba (iliyopigwa bomba), ambapo uundaji wa kifurushi cha kreti tegemezi huanza mara tu metadata tegemezi inapopatikana, bila kungoja utungaji wake ukamilike. Wakati wa kuandaa kifurushi, tegemezi hazihitaji kukusanywa kikamilifu, kufafanua metadata, ambayo inajumuisha orodha za aina, utegemezi, na vitu vilivyosafirishwa. Metadata inapatikana mapema katika mchakato wa ujumuishaji, kwa hivyo vifurushi vilivyounganishwa sasa vinaweza kukusanywa mapema zaidi. Wakati wa kujenga vifurushi moja, hali iliyopendekezwa haiathiri utendaji, lakini ikiwa ujenzi hufunika vifurushi na utegemezi wa matawi, muda wa jumla wa kujenga unaweza kupunguzwa kwa 10-20%;
  • Inahakikisha ugunduzi wa matumizi yasiyo sahihi ya vitendaji std::mem::haijaanzishwa ΠΈ std::mem::ziroed. Kwa mfano, std::mem::uninitialized ni rahisi kwa kuunda safu haraka, lakini inapotosha mkusanyaji kwa sababu inaonekana kuwa imeanzishwa, lakini kwa kweli thamani inasalia kuwa haijaanzishwa. Mem::kitendaji ambacho hakijatekelezwa tayari kimetiwa alama kuwa kimeacha kutumika na inashauriwa kutumia aina ya kati badala yake. Labda Kitengo. Kuhusu mem::zeroed, chaguo hili la kukokotoa linaweza kusababisha matatizo na aina ambazo haziwezi kukubali thamani sifuri.

    Ili kusaidia kutambua tabia isiyobainishwa, toleo jipya linaongeza ukaguzi wa lint kwa mkusanyaji ambao hutambua baadhi ya matatizo na mem::uninitialized au mem::zeroed. Kwa mfano, sasa unapata hitilafu unapojaribu kutumia mem::uninitialized au mem::zeroed na aina &T na Boxβ€ΉTβ€Ί, ambazo zinawakilisha vitu vya kielekezi ambavyo haviwezi kukubali thamani batili;

  • Sifa ya "#[imeacha kutumika]" imepanuliwa ili kuruhusu vifurushi vya kreti kutiwa alama kuwa havitumiki na kuratibiwa kufutwa baadaye. Kuanzia Rust 1.38, sifa hii inaweza pia kutumika kwa macros;
  • Imeongeza uwezo wa kutumia sifa ya "#[global_allocator]" katika moduli ndogo;
  • Kipengele kilichoongezwa std::yoyote::aina_jina, ambayo inakuwezesha kujua jina la aina, ambayo inaweza kuwa na manufaa kwa madhumuni ya kurekebisha. Kwa mfano, wakati wa utekelezaji wa programu unaweza kujua ni aina gani kazi hiyo iliitwa:

    fn gen_valueβ€ΉT: Chaguomsingi>() -β€Ί T {
    println!("Inaanzisha mfano wa {}", std::any::type_name::β€ΉTβ€Ί());
    Chaguomsingi::chaguo-msingi()
    }

    fn kuu() {
    acha _: i32 = gen_value(); # "i32" itachapishwa
    acha _: Kamba = gen_value(); # itachapisha "alloc::string::String"
    }

  • Utendaji uliopanuliwa wa maktaba ya kawaida:
    • slice::{concat, connect, join} sasa inaweza kuchukua thamani &[T] pamoja na &T;
    • "*const T" na "*mut T" sasa tekeleza alama::Banua;
    • "Arcβ€Ή[T]β€Ί" na "Rcβ€Ή[T]β€Ί" sasa zinatekeleza FromIteratorβ€ΉTβ€Ί;
    • iter::{StepBy, Peekable, Take} sasa tekeleza DoubleEndedIterator.
    • ascii ::EscapeDefault hutumia Clone na Display.
  • Sehemu mpya ya API imehamishiwa kwenye kategoria thabiti, ikijumuisha mbinu ambazo zimeimarishwa
    • β€Ή*const Tβ€Ί::cast, β€Ή*mut Tβ€Ί::cast,
    • Muda::as_secs_f{32|64},
    • Muda::div_duration_f{32|64},
    • Muda::div_f{32|64},
    • Muda::kutoka_secs_f{32|64},
    • Muda::mul_f{32|64},
    • shughuli za mgawanyiko na salio
      div_euclid na rem_euclid kwa primitives zote kamili;

  • Usaidizi ulioongezwa wa kubainisha chaguo la "--features" mara nyingi ili kuwezesha vipengele tofauti katika kidhibiti cha mizigo;
  • Mkusanyaji hutoa ya tatu ngazi msaada kwa majukwaa lengwa aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc lengwa, armvux7-haijulikani- -gnueabi, armv7-haijulikani-linux-musleabi, hexagon-haijulikani-linux-musl na riscv32i-haijulikani-hakuna-elf. Ngazi ya tatu inahusisha usaidizi wa kimsingi, lakini bila kupima kiotomatiki na uchapishaji wa miundo rasmi.

Chanzo: opennet.ru

Kuongeza maoni