Kutolewa kwa lugha ya programu ya kutu 1.40

iliyochapishwa kutolewa kwa lugha ya programu ya mfumo Kutu 1.40, iliyoanzishwa na mradi wa Mozilla. Lugha inazingatia usalama wa kumbukumbu, hutoa usimamizi wa kumbukumbu kiotomatiki, na hutoa zana za kufikia ulinganifu wa juu wa kazi bila kutumia mtoza taka na. Runtime.

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 uwezo wa kuweka alama kwa miundo (muundo) na hesabu (enum na Kizuizi cha Tofauti) kwa kutumia sifa "#[haijakamilika]", ambayo inaruhusu katika siku zijazo, ongeza sehemu mpya na chaguo kwa miundo na hesabu zilizotangazwa. Kwa mfano, wasanidi wa moduli ambazo zina miundo iliyo na sehemu zilizotangazwa hadharani wanaweza kutumia "#[zisizo_zito]" kuashiria miundo ambayo inaweza kuwa na sehemu mpya zitaongezwa katika siku zijazo. Hadi sasa, katika hali hii, msanidi programu alilazimishwa kuchagua kati ya kutangaza uga kwa faragha na kushurutisha kwa orodha isiyobadilika ya sehemu. Sifa mpya huondoa kizuizi hiki na hukuruhusu kuongeza sehemu mpya katika siku zijazo bila hatari ya kuvunja msimbo wa nje uliokusanywa hapo awali. Katika vifurushi vya crate, wakati chaguzi zinazolingana katika sehemu ya "mechi", ufafanuzi wazi wa kinyago "_ => {...}" unahitajika, kufunika sehemu zinazowezekana za siku zijazo, vinginevyo hitilafu itaonyeshwa wakati wa kuongeza sehemu mpya.
  • Imeongezwa uwezo wa kuita procedural macro mac!() katika muktadha wa aina. Kwa mfano, sasa unaweza kuandika β€œtype Foo = expand_to_type!(bar);” ikiwa β€œexpand_to_type” ni makro ya kiutaratibu.
  • Katika vizuizi vya "nje { ... }". aliongeza uwezo wa kutumia macros za kiutaratibu na sifa, ikiwa ni pamoja na "bang!()" macros, kwa mfano:

    sheria_makubwa! make_item { ($name: ident) => {fn $name(); }}

    nje {
    make_item!(alpha);
    make_item!(beta);
    }

    nje "C" {
    #[my_identity_macro] fn foo();
    }

  • Katika macros kutekelezwa uwezo wa kutengeneza vipengele vya "macro_rules!". Inazalisha "macro_rules!" inawezekana katika macros-kama-tendakazi (β€œmac!()”) na katika makro katika mfumo wa sifa (β€œ#[mac]”).
  • Katika kipengele cha $m:meta cha ramani aliongeza usaidizi wa thamani kiholela za kuhesabu tokeni ​​(β€œ[TOKEN_STREAM]”, β€œ{TOKEN_STREAM}” na β€œ(TOKEN_STREAM)”), kwa mfano:

    sheria_makubwa! accept_meta { ($m:meta) => {} }
    accept_meta!( yangu::njia);
    accept_meta!( yangu::path = "lit" );
    accept_meta!( yangu::njia ( abc ));
    accept_meta!( yangu::njia [ abc ] );
    accept_meta!( yangu::njia { abc });

  • Katika hali ya Rust 2015, pato la hitilafu limewezeshwa kwa matatizo yaliyotambuliwa wakati wa kuangalia ukopaji wa vigezo (kiangalia cha kukopa) kwa kutumia mbinu ya NLL (Non-Lexical Lifetimes). Hapo awali, maonyo yalibadilishwa na makosa wakati wa kukimbia katika hali ya Rust 2018.
    Baada ya mabadiliko kupanuliwa kwa hali ya Rust 2015, watengenezaji waliweza hatimaye ondoa kutoka kwa ukaguzi wa zamani wa kukopa.

    Hebu tukumbuke kwamba mfumo wa uthibitishaji kulingana na utaratibu mpya wa kuzingatia maisha ya vigezo vilivyokopwa ulifanya iwezekanavyo kutambua matatizo fulani ambayo hayakutambuliwa na msimbo wa uthibitishaji wa zamani. Kwa kuwa matokeo ya hitilafu kwa ukaguzi kama huo yanaweza kuathiri upatanifu na msimbo wa kufanya kazi hapo awali, maonyo yalitolewa awali badala ya makosa.

  • Sifa ya "const", ambayo huamua uwezekano wa kuitumia katika muktadha wowote badala ya viunga, inatumika kwa kazi ya is_power_of_two (kwa nambari kamili ambazo hazijasainiwa).
  • Sehemu mpya ya API imehamishwa hadi kwa kategoria thabiti, ikijumuisha todo!() macro na kipande::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, mbinu zimeimarishwa.
    Chaguo::as_deref, Chaguo::as_deref_mut, Chaguo::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_baiti,{ f32}::from_be_bytes, {f64,f32}::from_le_bytes, na {f64,f32}::from_ne_bytes.

  • Katika mizigo meneja wa mfuko
    kutekelezwa maonyo ya mkusanyaji kwenye diski. Imeongeza chaguo "metadata ya mizigo" kwa amri ya "metadata ya mizigo".--chujio-jukwaa" ili kuonyesha vifurushi vilivyofungwa tu kwa jukwaa lengwa lililobainishwa kwenye safu wima ya azimio la utegemezi. Chaguo la usanidi la http.ssl-version ili kufafanua matoleo halali ya TLS.
    Imeongeza uwezo wa kuchapisha sehemu "dev-tegemezi" bila kubainisha kitufe cha "toleo".

  • Mkusanyaji wa rustc hutoa usaidizi wa kiwango cha tatu kwa majukwaa lengwa ya thumbv7neon-haijulikani-linux-musleabihf, aarch64-haijulikani-none-softfloat, mips64-haijulikani-linux-muslabi64 na mips64el-haijulikani-linux-muslabi64. Ngazi ya tatu inahusisha usaidizi wa kimsingi, lakini bila kupima kiotomatiki na uchapishaji wa miundo rasmi.

Chanzo: opennet.ru

Kuongeza maoni