Rust 1.40 ohjelmointikielen julkaisu

julkaistu järjestelmän ohjelmointikielen julkaisu Ruoste 1.40, jonka perusti Mozilla-projekti. Kieli keskittyy muistin turvallisuuteen, tarjoaa automaattisen muistinhallinnan ja tarjoaa työkaluja korkean tehtävien rinnakkaisuuden saavuttamiseen ilman roskakeräystä ja runtime.

Rustin automaattinen muistinhallinta vapauttaa kehittäjän osoittimien manipuloinnista ja suojaa matalan tason muistin käsittelystä johtuvilta ongelmilta, kuten jälkivapailta muistin hauilta, nollaosoittimen viittauksilta, puskurin ylityksiltä ja vastaavilta. Paketinhallintaa kehitetään kirjastojen jakamiseen, kokoamisen varmistamiseen ja riippuvuuksien hallintaan projektin toimesta. lasti, jonka avulla voit saada ohjelman tarvitsemat kirjastot yhdellä napsautuksella. Arkisto on tuettu isäntäkirjastoille laatikot.io.

Pääasiallinen innovaatioita:

  • Lisätty mahdollisuus merkitä rakenteita (struct) ja luetteloita (enum varianttilohkolla) attribuutilla "#[ei tyhjentävä]", joka sen avulla tulevaisuudessa lisää uusia kenttiä ja vaihtoehtoja ilmoitettuihin rakenteisiin ja luetteloihin. Esimerkiksi sellaisten moduulien kehittäjät, joissa on julkisesti ilmoitettuja kenttiä sisältäviä rakenteita, voivat käyttää "#[non_exhaustive]" -merkkiä sellaisten rakenteiden merkitsemiseen, joihin voidaan tulevaisuudessa lisätä uusia kenttiä. Tähän asti kehittäjä oli tässä tilanteessa pakotettu valitsemaan kenttien yksityisen ilmoittamisen ja muuttumattoman kenttäluettelon sitomisen välillä. Uusi attribuutti poistaa tämän rajoituksen ja antaa sinun lisätä uusia kenttiä tulevaisuudessa ilman riskiä, ​​että aiemmin käännetty ulkoinen koodi rikkoutuu. Crate-paketeissa, kun “match”-osion vaihtoehtoja yhdistetään, vaaditaan maskin "_ => {...}" eksplisiittinen määritelmä, joka kattaa mahdolliset tulevat kentät, muuten tulee virheilmoitus uusia kenttiä lisättäessä.
  • lisätty kyky kutsua prosessimakroa mac!() tyyppikontekstissa. Voit nyt esimerkiksi kirjoittaa "type Foo = expand_to_type!(bar);", jos "laajenna_tyypiksi" on prosessimakro.
  • "extern { ... }" -lohkoissa lisätty kyky käyttää proseduuri- ja attribuuttimakroja, mukaan lukien "bang!()"-makroja, esimerkiksi:

    makro_säännöt! make_item { ($nimi:ident) => { fn $nimi(); } }

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

    ulkoinen "C" {
    #[oma_identiteetti_makro] fn foo();
    }

  • Makroissa toteutettu kyky luoda "macro_rules!"-elementtejä. Luodaan "macro_rules!" mahdollista sekä funktiomaisissa makroissa ("mac!()") että makroissa attribuuttien muodossa ("#[mac]").
  • $m:meta-kartoituselementissä lisätty tuki mielivaltaisille tunnuslukuarvoille ("[TOKEN_STREAM]", "{TOKEN_STREAM}" ja "(TOKEN_STREAM)"), esimerkiksi:

    makro_säännöt! accept_meta { ($m:meta) => {} }
    accept_meta!( my::polku );
    accept_meta!( my::path = "lit" );
    accept_meta!( my::polku ( abc ) );
    accept_meta!( my::polku [ abc ] );
    accept_meta!( my::polku { abc } );

  • Rust 2015 -tilassa virhetulostus on käytössä ongelmille, jotka havaitaan tarkistettaessa muuttujien lainaamista (lainaustarkistus) NLL-tekniikalla (Non-Lexical Lifetimes). Aiemmin varoitukset korvattiin virheillä ruoste 2018 -tilassa.
    Kun muutos laajennettiin Rust 2015 -tilaan, kehittäjät pystyivät vihdoin päästä eroon vanhasta lainaustarkistuksesta.

    Muistetaan, että uuteen mekanismiin perustuvan lainattujen muuttujien elinkaaren huomioon ottamiseen perustuvan varmennusjärjestelmän avulla voit tunnistaa joitain ongelmia, jotka jäivät vanhalta varmistuskoodilta huomaamatta. Koska tällaisten tarkistusten virhetulostus saattaa vaikuttaa yhteensopivuuteen aiemmin toimineen koodin kanssa, virheiden sijaan annettiin aluksi varoituksia.

  • "const"-attribuuttia, joka määrittää mahdollisuuden käyttää sitä missä tahansa yhteydessä vakioiden sijaan, käytetään is_power_of_wo-funktiolle (etumerkittömille kokonaisluvuille).
  • Uusi sovellusliittymän osa on siirretty vakaaseen luokkaan, mukaan lukien todo!()-makro ja slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, menetelmät on vakautettu.
    Optio::as_deref, Optio::as_deref_mut, Optio::litteä, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_32, {f64_bytes, f32}::from_be_bytes, {f64,f32}::from_le_bytes ja {f64,fXNUMX}::from_ne_bytes.

  • Paketinhallinnan lastissa
    toteutettu välimuistin kääntäjän varoitukset levylle. "Cargo metadata" -komentoon lisätty vaihtoehto "cargo metadata".--suodatin-alusta" näyttää vain määritettyyn kohdealustaan ​​sidotut paketit riippuvuuden ratkaisusarakkeessa. Lisätty http.ssl-version määritysvaihtoehto kelvollisten TLS-versioiden määrittämiseksi.
    Lisätty mahdollisuus julkaista osio "dev-riippuvuudet" määrittämättä "versio"-avainta.

  • Rustc-kääntäjä tarjoaa kolmannen tason tuen kohdealustoille thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 ja mips64el-unknown-linux-muslabi64. Kolmas taso sisältää perustuen, mutta ilman automaattista testausta ja virallisten koontiversioiden julkaisemista.

Lähde: opennet.ru

Lisää kommentti