Rust 1.40 programmeerimiskeele väljalase

avaldatud süsteemi programmeerimiskeele väljalase Rooste 1.40, mille asutas Mozilla projekt. Keel keskendub mälu ohutusele, pakub automaatset mäluhaldust ja pakub tööriistu ülesannete suure paralleelsuse saavutamiseks ilma prügikogujat ja runtime.

Rusti automaatne mäluhaldus säästab arendajat osutitega manipuleerimisest ja kaitseb madala tasemega mäluga manipuleerimisest tulenevate probleemide eest, nagu mälualale juurdepääs pärast selle vabastamist, nullviidate viitamise tühistamine, puhvri ülekoormus jne. Teekide levitamiseks, komplekteerimise tagamiseks ja sõltuvuste haldamiseks töötab projekt välja paketihalduri last, mis võimaldab hankida programmi jaoks vajalikud teegid ühe klõpsuga. Hoidlat toetatakse teekide hostimiseks crates.io.

Kõik uuendused:

  • Lisatud on võimalus märkida struktuure (struct) ja loendeid (enum koos variandi plokiga), kasutades atribuuti "#[mitte ammendav]", mis võimaldab tulevikus lisada deklareeritud struktuuridele ja loenditele uusi välju ja valikuid. Näiteks moodulite arendajad, millel on avalikult deklareeritud väljadega struktuurid, saavad kasutada "#[non_exhaustive]", et märkida struktuure, millele võidakse tulevikus lisada uusi välju. Seni oli arendaja selles olukorras sunnitud valima väljade privaatseks deklareerimise ja muutumatu väljade nimekirjaga sidumise vahel. Uus atribuut eemaldab selle piirangu ja võimaldab tulevikus lisada uusi välju, ilma et oleks oht varem kompileeritud välist koodi rikkuda. Kastipakettides on jaotises “match” valikute sobitamisel vajalik mask “_ => {...}” selgesõnaline definitsioon, mis hõlmab võimalikke tulevasi välju, vastasel juhul kuvatakse uute väljade lisamisel tõrge.
  • Lisatud võimalus kutsuda protseduurilist makrot mac!() tüübikontekstis. Näiteks võite nüüd kirjutada "type Foo = expand_to_type!(bar);", kui "laienda_tüübiks" on protseduuriline makro.
  • "Extern { ... }" plokkides lisatud võimalus kasutada protseduurilisi ja atribuudimakrosid, sealhulgas näiteks makrosid "bang!()".

    makro_reeglid! make_item { ($nimi:ident) => { fn $nimi(); } }

    extern {
    make_item!(alpha);
    make_item!(beeta);
    }

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

  • Makrodes rakendatud võime genereerida elemente "macro_rules!". "macro_rules!" genereerimine võimalik nii funktsioonilaadsetes makrodes (“mac!()”) kui ka atribuutide kujul (“#[mac]”).
  • $m:meta vastendamise elemendis lisatud suvaliste märgiloendite väärtuste tugi ("[TOKEN_STREAM]", "{TOKEN_STREAM}" ja "(TOKEN_STREAM)"), näiteks:

    makro_reeglid! aktsepteeri_meta { ($m:meta) => {} }
    aktsepteeri_meta!( minu::tee );
    aktsepteeri_meta!( minu::tee = "valgustatud" );
    aktsepteeri_meta!( minu::tee ( abc ) );
    aktsepteeri_meta!( minu::tee [ abc ] );
    aktsepteeri_meta!( minu::tee { abc } );

  • Režiimis Rust 2015 on tõrkeväljund lubatud probleemide korral, mis tuvastatakse muutujate laenamise kontrollimisel (laenamise kontrollija), kasutades NLL-tehnikat (Non-Lexical Lifetimes). Varem asendati hoiatused Rust 2018 režiimis töötamisel vigadega.
    Pärast muudatuse laiendamist Rust 2015 režiimile said arendajad lõpuks seda teha vabaneda vanast laenukontrollijast.

    Meenutagem, et laenatud muutujate eluea arvestamise uuel mehhanismil põhinev kontrollisüsteem võimaldas tuvastada mõningaid probleeme, mis jäid vanale kontrollkoodile märkamatuks. Kuna selliste kontrollide veaväljund võib mõjutada ühilduvust varem töötava koodiga, anti vigade asemel algselt hoiatused.

  • Atribuuti “const”, mis määrab võimaluse kasutada seda konstantide asemel mis tahes kontekstis, kasutatakse funktsiooni is_power_of_wo (märgita täisarvude puhul).
  • API uus osa on viidud stabiilsesse kategooriasse, sealhulgas makro todo!() ja slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, meetodid on stabiliseeritud.
    Valik::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_32, {f64,f32, f64}::from_be_bytes, {f32,f64}::from_le_bytes ja {fXNUMX,fXNUMX}::from_ne_bytes.

  • Pakendihalduri lastis
    rakendatud kettale vahemällu salvestava kompilaatori hoiatused. Käsule "lasti metaandmed" lisati valik "lasti metaandmed".--filter-platvorm", et näidata sõltuvuslahenduse veerus ainult määratud sihtplatvormiga seotud pakette. Kehtivate TLS-i versioonide määratlemiseks on lisatud konfiguratsioonivalik http.ssl-version.
    Lisatud on võimalus avaldada jaotis "dev-sõltuvused" ilma klahvi "versioon" määramata.

  • Rustc-kompilaator pakub kolmanda taseme tuge sihtplatvormidele thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 ja mips64el-unknown-linux-muslabi64. Kolmas tase hõlmab põhituge, kuid ilma automaatse testimise ja ametlike ehituste avaldamiseta.

Allikas: opennet.ru

Lisa kommentaar