Rust 1.58 ohjelmointikielen julkaisu

Mozilla-projektin perustaman, mutta nyt itsenäisen voittoa tavoittelemattoman järjestön Rust Foundationin alaisuudessa kehitetyn yleiskäyttöisen ohjelmointikielen Rust 1.58 julkaisu on julkaistu. Kieli keskittyy muistin turvallisuuteen, tarjoaa automaattisen muistinhallinnan ja tarjoaa välineet korkean tehtävien rinnakkaisuuden saavuttamiseen ilman roskankerääjää tai ajonaikaa (ajoaika rajoittuu 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:

  • Rivin muotoilulohkoissa sen lisäksi, että aiemmin oli mahdollisuus korvata rivin jälkeen nimenomaisesti lueteltuja muuttujia numerolla ja nimellä, on toteutettu mahdollisuus korvata mielivaltaisia ​​tunnisteita lisäämällä riville lauseke "{tunniste}". Esimerkiksi: // Aiemmin tuetut rakenteet: println!("Hei, {}!", get_person()); println!("Hei, {0}!", get_person()); println!("Hei, {henkilö}!", henkilö = get_person()); // nyt voit määrittää let person = get_person(); println!("Hei, {henkilö}!");

    Tunnisteet voidaan määrittää myös suoraan muotoiluasetuksissa. anna (leveys, tarkkuus) = get_format(); for (nimi, pistemäärä) in get_scores() { println!("{nimi}: {score:width$. precision$}"); }

    Uusi korvaus toimii kaikissa makroissa, jotka tukevat merkkijonomuodon määrittelyä, paitsi "paniikki!". Rust-kielen 2015 ja 2018 versioissa, joissa paniikkia!("{ident}") käsitellään tavallisena merkkijonona (Rust 2021:ssä korvaus toimii).

  • Std::process::komentorakennetta Windows-alustalla on muutettu siten, että komentoja suoritettaessa se ei turvallisuussyistä enää etsi suoritettavia tiedostoja nykyisestä hakemistosta. Nykyinen hakemisto jätetään pois, koska sitä voidaan käyttää haitallisen koodin suorittamiseen, jos ohjelmia ajetaan epäluotettavissa hakemistoissa (CVE-2021-3013). Uusi suoritettavan tunnistuslogiikka sisältää haun Rust-hakemistoista, sovellushakemistosta, Windowsin järjestelmähakemistosta ja PATH-ympäristömuuttujassa määritellyistä hakemistoista.
  • Vakiokirjasto on laajentanut #[must_use] -merkittyjen funktioiden määrää antamaan varoituksen, jos palautusarvo jätetään huomioimatta, mikä auttaa tunnistamaan virheet, jotka johtuvat siitä, että funktio muuttaa arvoja uuden arvon sijaan.
  • Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
    • Metatiedot::is_symlink
    • Polku::is_symlink
    • {kokonaisluku}::saturating_div
    • Vaihtoehto::unwrap_unchecked
    • Tulos::unwrap_unchecked
    • Tulos::unwrap_err_unchecked
  • "const"-attribuuttia, joka määrittää mahdollisuuden käyttää missä tahansa kontekstissa vakioiden sijaan, käytetään funktioissa:
    • Kesto::uusi
    • Kesto::checked_add
    • Kesto::saturating_add
    • Kesto::checked_sub
    • Kesto::saturating_sub
    • Kesto::checked_mul
    • Kesto::saturating_mul
    • Kesto::checked_div
  • Sallittu "*const T" -osoittimien viittauksen poistaminen "const"-konteksteissa.
  • Cargo-paketinhallinnassa rust_version-kenttä on lisätty paketin metatietoihin ja "--message-format" -vaihtoehto on lisätty "cargo install" -komentoon.
  • Kääntäjä tukee CFI (Control Flow Integrity) -suojausmekanismia, joka lisää tarkistuksia ennen jokaista epäsuoraa kutsua havaitakseen tietyt määrittelemättömän toiminnan muodot, jotka voivat mahdollisesti johtaa normaalin suoritusjärjestyksen (ohjausvirran) rikkomiseen. käyttää hyväksikäyttöä, joka muuttaa funktioiden muistiin tallennettuja osoittimia.
  • Kääntäjä on lisännyt tuen LLVM-peittovertailumuodon versioille 5 ja 6, joita käytetään koodin kattavuuden arvioimiseen testauksen aikana.
  • Kääntäjässä LLVM:n vähimmäisversion vaatimukset nostetaan LLVM 12:een.
  • Kolmas tukitaso x86_64-unknown-none alustalle on otettu käyttöön. Kolmas taso sisältää perustuen, mutta ilman automaattista testausta, virallisten koontiversioiden julkaisemista tai sen tarkistamista, voidaanko koodi rakentaa.

Lisäksi voimme huomioida Microsoftin julkaisun Rust for Windows 0.30 -kirjastoista, joiden avulla voit käyttää Rust-kieltä sovellusten kehittämiseen Windows-käyttöjärjestelmää varten. Sarja sisältää kaksi laatikkopakettia (windows ja windows-sys), joiden kautta pääset Rust-ohjelmien Win API:han. API-tuen koodi luodaan dynaamisesti API:ta kuvaavista metatiedoista, minkä ansiosta voit ottaa käyttöön tuen paitsi olemassa oleville Win API -kutsuille myös tuleville kutsuille. Uusi versio lisää tuen UWP (Universal Windows Platform) -kohdealustaan ​​ja toteuttaa Handle- ja Debug-tyypit.

Lähde: opennet.ru

Lisää kommentti