Kutolewa kwa lugha ya programu ya kutu 1.47

iliyochapishwa kutolewa 1.47 ya lugha ya programu ya mfumo Kutu, 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 ΠΈ Runtime (muda wa kukimbia unakaribia kuanzishwa kwa msingi na matengenezo ya maktaba ya kawaida).

Udhibiti wa kumbukumbu otomatiki wa Rust huondoa hitilafu wakati wa kuchezea viashiria na hulinda dhidi ya matatizo yanayotokana na upotoshaji wa kumbukumbu wa kiwango cha chini, kama vile kufikia eneo la kumbukumbu baada ya kuachiliwa, vielekezo visivyofaa vya vielelezo, utiririshaji wa bafa, n.k. Kidhibiti kifurushi kinatayarishwa ili kusambaza maktaba, kuhakikisha kukusanya na kudhibiti utegemezi wa mradi. Cargo. Hifadhi inaweza kutumika kupangisha maktaba crates.io.

kuu ubunifu:

  • Usaidizi uliotekelezwa kwa aina safu ukubwa wowote. Hapo awali, kutokana na kutokuwa na uwezo wa kufafanua vitendaji vya jumla kwa thamani zote kamili, maktaba ya kawaida ilitoa usaidizi wa sifa uliojengewa ndani kwa safu hadi vipengele 32 kwa ukubwa (sifa za kila saizi zilibainishwa kwa takwimu). Shukrani kwa uundaji wa utendakazi wa jenetiki za mara kwa mara ("const generics"), iliwezekana kufafanua kazi za generic kwa saizi yoyote ya safu, lakini bado hazijajumuishwa katika sifa za lugha thabiti, ingawa zinatekelezwa kwenye mkusanyaji na sasa. husika katika maktaba ya kawaida ya sifa za safu za ukubwa wowote.

    Kwa mfano, muundo ufuatao katika Rust 1.47 utachapisha yaliyomo kwenye safu, ingawa hapo awali ingesababisha hitilafu:

    fn kuu() {
    acha xs = [0; 34];

    println!("{:?}", xs);
    }

  • Zinazotolewa matokeo ya athari fupi (nyuma), pato katika hali ya dharura. Vipengele ambavyo havina riba katika hali nyingi, lakini vinachanganya pato na kuvuruga tahadhari kutoka kwa sababu za msingi za tatizo, hazijumuishwa kwenye ufuatiliaji. Ili kurudisha ufuatiliaji kamili, unaweza kutumia utofauti wa mazingira "RUST_BACKTRACE=full". Kwa mfano, kwa kanuni

    fn kuu() {
    wasiwasi!();
    }

    Hapo awali, ufuatiliaji ulitolewa katika hatua 23, lakini sasa itapunguzwa
    Hatua 3 zinazokuruhusu kufahamu kiini mara moja:

    thread 'kuu' iliingiwa na hofu kwa 'hofu ya wazi', src/main.rs:2:5
    safu ya nyuma:
    0: std::panic::anza_panic
    kwa /rustc/d…d75a/library/std/src/panicking.rs:497
    1: uwanja wa michezo:: kuu
    katika ./src/main.rs:2
    2: core::ops::function::FnOnce::call_ once
    kwa /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Kikusanya rustc kimesasishwa ili kujenga kwa kutumia LLVM 11 (Kutu hutumia LLVM kama sehemu ya nyuma ya utengenezaji wa kanuni) Wakati huo huo, uwezo wa kujenga na LLVM za zamani, hadi toleo la 8, huhifadhiwa, lakini kwa chaguo-msingi (katika rust-lang/llvm-project) sasa inatumia LLVM 11. LLVM 11 inatarajiwa kutolewa katika siku zijazo.
  • Kwenye jukwaa la Windows, kikusanya rustc hutoa usaidizi wa kuwezesha ukaguzi wa uadilifu wa udhibiti (Control Flow Guard), iliyoamilishwa kwa kutumia bendera ya "-C control-flow-guard". Kwenye mifumo mingine bendera hii imepuuzwa kwa sasa.
  • Sehemu mpya ya API imehamishiwa kwenye aina thabiti, ikiwa ni pamoja na kuimarishwa
    Kitambulisho::mpya_mbichi,
    Safu::haina_tupu,
    Masafa Yanayojumuisha::hayana_tupu,
    Matokeo::as_deref,
    Matokeo::as_deref_mut,
    Vec::vuja,
    pointer::offset_from,
    f32::TAU na
    f64::TAU.

  • Sifa ya "const", ambayo huamua uwezekano wa kuitumia katika muktadha wowote badala ya mara kwa mara, hutumiwa katika njia:
    • mpya kwa nambari kamili zaidi ya sifuri;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shr, saturating_add, saturating_sub na saturating_mul kwa nambari zote;
    • is_ascii_alfabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace and for_ascii_ucontrol.
  • Kwa FreeBSD husika zana kutoka kwa FreeBSD 11.4 (FreeBSD 10 haitumii LLVM 11).

Chanzo: opennet.ru

Kuongeza maoni