Izdaja programskega jezika Rust 1.40

Objavljeno izdaja sistemskega programskega jezika Rja 1.40, ki ga je ustanovil projekt Mozilla. Jezik se osredotoča na varnost pomnilnika, zagotavlja samodejno upravljanje pomnilnika in ponuja orodja za doseganje visoke vzporednosti nalog brez uporabe zbiralnika smeti in runtime.

Rustovo samodejno upravljanje pomnilnika reši razvijalca pred manipulacijo kazalcev in ščiti pred težavami, ki izhajajo iz manipulacije pomnilnika na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnih kazalcev, prekoračitev medpomnilnika itd. Za distribucijo knjižnic, zagotavljanje sestavljanja in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo, ki vam omogoča, da z enim klikom pridobite knjižnice, ki jih potrebujete za program. Repozitorij je podprt za gostovanje knjižnic zaboji.io.

Glavni inovacije:

  • Dodana možnost označevanja struktur (struct) in oštevilčenj (enum z blokom Variant) z uporabo atributa "#[ne_izčrpno]", ki omogoča v prihodnje dodajte nova polja in možnosti deklariranim strukturam in številčenjem. Na primer, razvijalci modulov, ki imajo strukture z javno deklariranimi polji, lahko uporabijo »#[non_exhaustive]«, da označijo strukture, ki jim bodo morda v prihodnosti dodana nova polja. Do zdaj je bil razvijalec v tej situaciji prisiljen izbirati med zasebno prijavo polj in vezavo na nespremenljiv seznam polj. Nov atribut odstrani to omejitev in vam omogoča dodajanje novih polj v prihodnosti brez tveganja, da bi zlomili predhodno prevedeno zunanjo kodo. V paketih zabojev je pri ujemanju možnosti v razdelku »ujema« potrebna izrecna definicija maske »_ => {...}«, ki zajema morebitna prihodnja polja, sicer bo pri dodajanju novih polj prikazana napaka.
  • Dodano zmožnost klica proceduralnega makra mac!() v kontekstu tipa. Zdaj lahko na primer napišete »type Foo = expand_to_type!(bar);«, če je »expand_to_type« proceduralni makro.
  • V blokih "extern { ... }". dodano možnost uporabe proceduralnih in atributnih makrov, vključno z makri »bang!()«, na primer:

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

    extern {
    make_item!(alfa);
    make_item!(beta);
    }

    extern "C" {
    #[moja_identiteta_makro] fn foo();
    }

  • V makrih izvajati sposobnost generiranja elementov »macro_rules!«. Ustvarjanje "macro_rules!" mogoče v funkcijsko podobnih makrih (»mac!()«) in v makrih v obliki atributov (»#[mac]«).
  • V elementu preslikave $m:meta dodano podpora za poljubne vrednosti oštevilčenja žetonov (»[TOKEN_STREAM]«, »{TOKEN_STREAM}« in »(TOKEN_STREAM)«), na primer:

    makro_pravila! accept_meta { ($m:meta) => {} }
    accept_meta!(moja::pot);
    accept_meta!( my::path = "lit");
    accept_meta!( my::path ( abc ) );
    accept_meta!( my::path [ abc ] );
    accept_meta!( my::path { abc } );

  • V načinu Rust 2015 je izpis napak omogočen za težave, ugotovljene pri preverjanju izposoje spremenljivk (preverjevalnik izposoje) s tehniko NLL (Non-Lexical Lifetimes). Prej so bila opozorila nadomeščena z napakami pri izvajanju v načinu Rust 2018.
    Ko je bila sprememba razširjena na način Rust 2015, so razvijalci končno lahko znebiti se iz starega pregledovalnika izposoje.

    Spomnimo se, da je sistem preverjanja, ki temelji na novem mehanizmu za upoštevanje življenjske dobe izposojenih spremenljivk, omogočil odkrivanje nekaterih težav, ki jih stara koda preverjanja ni opazila. Ker bi izhod napak za takšna preverjanja lahko vplival na združljivost s prej delujočo kodo, so bila sprva namesto napak izdana opozorila.

  • Za funkcijo is_power_of_two (za nepredznačena cela števila) se uporablja atribut “const”, ki določa možnost uporabe v poljubnem kontekstu namesto konstant.
  • Nov del API-ja je bil premaknjen v stabilno kategorijo, vključno z makrom todo!() in slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metode so bile stabilizirane.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32, f64}::from_be_bytes, {f32,f64}::from_le_bytes in {f32,f64}::from_ne_bytes.

  • V upravitelju paketov tovor
    izvajati predpomnjenje opozoril prevajalnika na disk. Dodana možnost "metapodatki o tovoru" ukazu "metapodatki o tovoru".--filtrska platforma" za prikaz samo paketov, vezanih na podano ciljno platformo v stolpcu za razrešitev odvisnosti. Dodana možnost konfiguracije http.ssl-version za definiranje veljavnih različic TLS.
    Dodana možnost objave razdelka "odvisnosti od razvijalcev" brez navedbe ključa "version".

  • Prevajalnik rustc zagotavlja podporo tretje stopnje za ciljne platforme thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 in mips64el-unknown-linux-muslabi64. Tretja raven vključuje osnovno podporo, vendar brez avtomatiziranega testiranja in objave uradnih gradenj.

Vir: opennet.ru

Dodaj komentar