Rust 1.47 ohjelmointikielen julkaisu

julkaistu järjestelmän ohjelmointikielen versio 1.47 Ruoste, jonka perusti Mozilla-projekti. Kieli keskittyy muistin turvallisuuteen, tarjoaa automaattisen muistinhallinnan ja tarjoaa keinon saavuttaa korkea tehtävien rinnakkaisuus ilman käyttöä roskankerääjä и runtime (ajoaika tiivistyy vakiokirjaston perusalustukseen ja ylläpitoon).

Rustin automaattinen muistinhallinta eliminoi virheet osoittimia käsiteltäessä ja suojaa matalan tason muistin käsittelystä aiheutuvilta ongelmilta, kuten muistialueen käyttämiseltä sen vapauttamisen jälkeen, nollaosoittimen viittauksilta, puskurin ylityksiltä jne. Paketinhallintaa kehitetään kirjastojen jakamiseen, kokoamisen varmistamiseen ja riippuvuuksien hallintaan projektin toimesta. lasti. Arkisto on tuettu isäntäkirjastoille laatikot.io.

Pääasiallinen innovaatioita:

  • Toteutettu tuki tyypeille taulukoita mikä tahansa koko. Koska aiemmin ei pystytty määrittelemään yleisiä toimintoja kaikille kokonaislukuarvoille, vakiokirjasto tarjosi sisäänrakennetun ominaisuustuen vain taulukoille, joiden koko oli enintään 32 elementtiä (kunkin koon ominaisuudet määriteltiin staattisesti). Vakioiden geneeristen ("const generics") toiminnallisuuden luomisen ansiosta tuli mahdolliseksi määritellä yleisfunktioita mille tahansa taulukon koolle, mutta ne eivät vielä sisälly stabiilien kielten ominaisuuksiin, vaikka ne on toteutettu kääntäjässä ja ovat nyt mukana vakiokirjastossa kaikenkokoisille taulukon ominaisuuksille.

    Esimerkiksi seuraava rakenne Rust 1.47:ssä tulostaa taulukon sisällön, vaikka aiemmin se olisi johtanut virheeseen:

    fnmain() {
    olkoon xs = [0; 34];

    println!("{:?}", xs);
    }

  • Tarjotaan lyhyempien jälkien (backtrace) tulos, lähtö hätätilanteissa. Sellaiset elementit, jotka eivät useimmissa tilanteissa kiinnosta, mutta sotkevat tulosteen ja häiritsevät huomion ongelman ensisijaisista syistä, jätetään jäljestä pois. Palauttaaksesi täyden jäljen, voit käyttää ympäristömuuttujaa "RUST_BACKTRACE=full". Esimerkiksi koodille

    fnmain() {
    paniikki!();
    }

    Aiemmin jäljitettiin 23 vaiheessa, mutta nyt se pienennetään
    3 vaihetta, joiden avulla ymmärrät olemuksen välittömästi:

    säie "main" joutui paniikkiin "explicit panic", src/main.rs:2:5
    pinon jälkijäljitys:
    0: std::panicking::begin_panic
    osoitteessa /rustc/d…d75a/library/std/src/panicking.rs:497
    1: leikkipaikka::main
    osoitteessa ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    osoitteessa /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Rustc-kääntäjä on päivitetty rakentamaan käyttämällä LLVM 11 (Ruoste käyttää LLVM taustaohjelmaksi koodin luominen). Samanaikaisesti kyky rakentaa vanhemmilla LLVM-koneilla, aina versioon 8 asti, säilyy, mutta oletuksena ( rust-lang/llvm-projekti) käyttää nyt LLVM 11:tä. LLVM 11:n odotetaan julkaistavan lähipäivinä.
  • Windows-alustalla rustc-kääntäjä tukee ohjausvirran eheystarkistuksia (Control Flow Guard), jotka aktivoidaan "-C control-flow-guard" -lipulla. Muilla alustoilla tätä lippua ei huomioida toistaiseksi.
  • Uusi osa API:ista on siirretty vakaaseen luokkaan, mukaan lukien stabiloidut
    Ident::new_raw,
    Alue::on_tyhjä,
    RangeInclusive::is_tyhjä,
    Tulos::as_deref,
    Tulos::as_deref_mut,
    Vanha::vuoto,
    osoitin::offset_from,
    f32::TAU ja
    f64::TAU.

  • "const"-attribuuttia, joka määrittää mahdollisuuden käyttää sitä missä tahansa kontekstissa vakioiden sijaan, käytetään menetelmissä:
    • uusi kaikille muille kokonaisluvuille kuin nolla;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub ja saturating_mul kaikille kokonaisluvuille;
    • on_ascii_aakkosellinen, is_ascii_isot kirjaimet, is_ascii_pienet kirjaimet, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace ja is_ascii- ja_ucontrol-tyypit.
  • FreeBSD:lle mukana Toolkit FreeBSD 11.4:stä (FreeBSD 10 ei tue LLVM 11:tä).

Lähde: opennet.ru

Lisää kommentti