Rust 1.47 ohjelmointikielen julkaisu

Mozilla-projektin perustaman Rust-järjestelmäohjelmointikielen versio 1.47 on julkaistu. Kieli keskittyy muistin turvallisuuteen, tarjoaa automaattisen muistinhallinnan ja tarjoaa välineet korkean tehtävien rinnakkaisuuden saavuttamiseen ilman roskankerääjää tai ajonaikaa (ajoaika on rajoittunut 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. Kirjastojen jakeluun, kokoonpanon varmistamiseen ja riippuvuuksien hallintaan projektissa kehitetään Cargo-pakettien hallintaa. Crates.io-tietovarastoa tuetaan kirjastojen isännöintiin.

Tärkeimmät innovaatiot:

  • Toteutettu tuki mielivaltaisen kokoisille taulukoille. 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). Const generics -toiminnallisuuden luomisen ansiosta tuli mahdolliseksi määritellä yleisfunktioita mille tahansa taulukon koolle, mutta ne eivät vielä sisälly kielen vakaisiin ominaisuuksiin, vaikka ne on toteutettu kääntäjässä ja niitä käytetään nyt vakiokirjastossa kaikenkokoisille matriisityypeille.
    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 vaihetta, mutta nyt se pienennetään 3 vaiheeseen, jolloin voit heti ymmärtää sen olemuksen:

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:tä (Rust käyttää LLVM:ää taustaohjelmana koodin luomiseen). Samaan aikaan kyky rakentaa vanhalla LLVM:llä versioon 8 asti säilyy, mutta oletusarvoisesti (rust-lang/llvm-projektissa) käytössä on nyt LLVM 11. LLVM 11:n julkaisua odotetaan lähiaikoina. päivää.
  • 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:sta on siirretty vakaaseen luokkaan, mukaan lukien stabiloitu Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::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:ssä käytetään FreeBSD 11.4:n työkalupakkia (FreeBSD 10 ei tue LLVM 11:tä).

Otettu opennet.ru

Lähde: linux.org.ru

Lisää kommentti