Rust 1.42 ohjelmointikielen julkaisu

julkaistu järjestelmän ohjelmointikielen julkaisu Ruoste 1.42, 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 tuki malleille osien yhteensovittamiseksi (dynaamiset taulukot, slice). Aikaisemmin tarkat vastaavuudet olivat sallittuja, mutta nyt on mahdollista käyttää ".."-merkittyjä konstrukteja peittämään taulukon muut elementit. Esimerkiksi:

    fn foo(sanat: &[&str]) {
    vastaa sanoja {

    // tarkistaa taulukon aloituselementit ja jättää huomiotta
    niitä seuraavat elementit
    ["Hei", "Maailma", "!", ..] => println!("Hei maailma!"),

    // tarkistaa kaksi ensimmäistä elementtiä "Foo" ja "Bar", ja loput eivät ole tärkeitä
    ["Foo", "Baari", ..] => println!("Baz"),

    // ohita kaikki, mutta viimeisen elementin on oltava "!".
    [.., "!"] => println!(“!!!”),

    // aloitusviipaleeseen sisällytetään kaikki paitsi viimeinen elementti, jonka pitäisi olla "z"
    [aloitus @ .., "z"] => println!("alkaa: {:?}", aloita),

    // laitamme loppuosaan kaiken paitsi ensimmäisen elementin, jonka pitäisi olla "a".
    ["a", end @ ..] => println!("päättyy: {:?}", loppu),

    rest => println!("{:?}", loput),
    }
    }

  • Lisätty uusi makro "matches!", joka ottaa lausekkeen ja kuvion syötteenä ja palauttaa "true", jos kuvio vastaa lauseketta. Malli voi käyttää "|"-toimintoja ja jos".

    vastaa self.partial_cmp(other) {
    Jotkut (vähemmän) => totta,
    _ => väärä,
    }

    vastaa!(self.partial_cmp(other), Some(Less))

    let foo = 'f';
    väittää!(vastaa!(foo, 'A'..='Z' | 'a'..='z'));

    let bar = Jotkut(4);
    väittää!(vastaa!(bar, Jotkut(x), jos x > 2));

  • Paniikkiviestit näytetään, kun niitä käytetään väärin
    Tyypit Optio ja Result, näyttää nyt rivinumerot, joissa on linkki ongelmallisen kutsun tehneeseen koodiin, sen sijaan, että olisit linkkejä libcoressa kutsun toteuttavaan koodiin. Muutos vaikuttaa esimerkiksi kutsuihin purkaa ja odottaa Optio::Ei mitään tai kaatuu käytettäessä unwrap_err, expect, expect_err ja vastaavia menetelmiä Result-tyypissä.

  • Cargo-pakettien hallintaohjelma korvaa automaattisesti "proc_macro crate" -lohkon "extern"-lohkoksi paketeille, joissa on prosessimakroja. Tämä muutos mahdollistaa "use"-direktiivin soveltamisen prosessimakroihin ilman, että koodissa on määritettävä "extern crate proc_macro;". Jos ohjelma esimerkiksi käyttää riviä "use proc_macro::TokenStream;", koodi pysyy nyt toiminnassa, jos "extern crate proc_macro;" poistetaan siitä.
  • Vakiokirjaston ominaisuuksia on laajennettu. Kohdassa::Tyhjä lisätty Lähetys- ja synkronointituki kaikille T-arvoille.
    Puhelun PIN-koodi::{map_unchecked, map_unchecked_mut} toimitettu joutumasta palauttamaan "Sized"-toteutuksen tyyppiarvo.
    In io::Cursor toteutettu PartialEq ja Eq. Attribuutti "const" määrittää käyttömahdollisuuden missä tahansa kontekstissa vakioiden sijaan, sovelletaan Layout::new-menetelmää varten.

  • Uusi osa API:sta on siirretty vakaaseen luokkaan, mukaan lukien stabiloitu CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::key, DebugMap::arvo,
    ManuallyDrop::take,
    ptr::slice_from_raw_parts_mut ja ptr::slice_from_raw_parts.

  • Error::description-menetelmä on vanhentunut.
  • Tarjosi toisen tason tuen armv7a-none-eabi- ja riscv64gc-unknown-linux-gnu-alustoille. Tuki vakiokirjastolle riscv64gc-unknown-linux-gnu alustalle on toimitettu.
    Applen 32-bittiset alustat alennettu kolmanteen tukitasoon asti, mikä tarkoittaa perustukea, mutta ilman automaattista testausta ja virallisten koontiversioiden julkaisemista. Tuen lasku johtuu siitä, että Apple ei enää tue 32-bittisiä alustoja.

Lähde: opennet.ru

Lisää kommentti