Kutolewa kwa lugha ya programu ya kutu 1.47

Toleo la 1.47 la lugha ya programu ya mfumo wa Rust, lililoanzishwa na mradi wa Mozilla, limechapishwa. Lugha inazingatia usalama wa kumbukumbu, hutoa usimamizi wa kumbukumbu otomatiki, na hutoa njia za kufikia usawa wa juu wa kazi bila kutumia mtoza takataka au wakati wa kukimbia (muda wa kukimbia umepunguzwa kuwa uanzishaji wa 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. Ili kusambaza maktaba, kuhakikisha kukusanya na kudhibiti utegemezi, mradi unatengeneza msimamizi wa kifurushi cha Cargo. Hazina ya crates.io inatumika kwa kupangisha maktaba.

Ubunifu kuu:

  • Usaidizi uliotekelezwa wa sifa kwa safu za ukubwa usio na mpangilio. 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 jenereta za const, iliwezekana kufafanua kazi za generic kwa saizi yoyote ya safu, lakini bado hazijajumuishwa katika sifa thabiti za lugha, ingawa zinatekelezwa kwenye mkusanyaji na sasa zinatumika kwenye maktaba ya kawaida. kwa aina 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 hadi hatua 3, kukuwezesha kufahamu mara moja kiini:

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

  • Mkusanyaji wa rustc amesasishwa ili kujenga kwa kutumia LLVM 11 (Rust hutumia LLVM kama njia ya nyuma ya utengenezaji wa nambari). Wakati huo huo, uwezo wa kujenga na LLVM ya zamani, hadi toleo la 8, huhifadhiwa, lakini kwa chaguo-msingi (katika rust-lang/llvm-project) LLVM 11 sasa inatumika. Kutolewa kwa LLVM 11 kunatarajiwa katika siku zijazo. siku.
  • 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 kategoria thabiti, ikijumuisha Kitambulisho kilichoimarishwa::mpya_mbichi, Msururu::ni_tupu, RangeInajumuisha::ni_tupu, Matokeo::as_deref, Result::as_deref_mut, Vec::leak, 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, zana ya zana kutoka FreeBSD 11.4 inatumika (FreeBSD 10 haitumii LLVM 11).

Imechukuliwa kutoka opennet.ru

Chanzo: linux.org.ru

Kuongeza maoni