Rust-ohjelmointikielen julkaisu 2021 (1.56)

Mozilla-projektin perustaman, mutta nyt itsenäisen voittoa tavoittelemattoman järjestön Rust Foundationin alaisuudessa kehitetyn järjestelmäohjelmointikielen Rust 1.56 julkaisu on julkaistu. Tavallisen versionumeron lisäksi julkaisu on nimetty myös Rust 2021:ksi ja se merkitsee kolmen viime vuoden aikana ehdotettujen muutosten vakauttamista. Rust 2021 toimii myös perustana toiminnallisuuden lisäämiselle seuraavien kolmen vuoden aikana, samalla tavalla kuin Rust 2018:n julkaisusta tuli perusta kielen kehitykselle viimeisen kolmen vuoden aikana.

Yhteensopivuuden ylläpitämiseksi kehittäjät voivat käyttää ohjelmissaan merkintöjä "2015", "2018" ja "2021", jolloin ohjelmat voidaan linkittää valittuja Rust-versioita vastaaviin kielen tilaosuuksiin. Versioita otettiin käyttöön yhteensopimattomien muutosten erottamiseksi, ja ne konfiguroidaan rahtipakettien metatiedoissa "[paketti]"-osion "painos"-kentän kautta. Esimerkiksi "2018" -versio sisältää toiminnallisuuden, joka on vakiintunut vuoden 2018 loppuun mennessä, ja kattaa myös kaikki muut muutokset, jotka eivät riko yhteensopivuutta. 2021-versio sisältää lisäksi yhteentoimivuutta rikkovia ominaisuuksia, joita ehdotetaan nykyisessä 1.56-versiossa ja jotka on hyväksytty tulevaa käyttöönottoa varten. Itse kielen lisäksi toimittajat ottavat huomioon myös työkalujen ja dokumentaation tilan.

Tärkeimmät Rust 2021 -yhteensopimattomuudet:

  • Erillinen sieppaus sulkemisissa - Sulkemiset voivat nyt kaapata yksittäisten kenttien nimet koko tunnisteen sijaan. Esimerkiksi "|| ax + 1" ottaa vain "ax":n "a":n sijaan.
  • IntoIterator-ominaisuus taulukoille: array.into_iter() mahdollistaa taulukon elementtien iteroinnin arvojen perusteella viittausten sijaan.
  • "|"-lausekkeiden käsittelyä on muutettu macro_rules-kohdassa (Totuusarvo TAI) malleissa - ":pat"-määrittäjä vastaa nyt "A | B".
  • Rahtipaketin hallinta sisältää oletuksena toisen version ominaisuusselvittimestä, jonka tuki ilmestyi Rust 1.51:ssä.
  • TryFrom-, TryInto- ja FromIterator-ominaisuudet on lisätty prelude-standardikirjastomoduuliin.
  • Panic!(..)- ja assert!(expr, ..) -makrot käyttävät nyt aina format_args!(..) -muotoa merkkijonojen muotoiluun, kuten println!().
  • Lausekkeet ident#, ident»..." ja ident'...' on varattu kielen syntaksissa.
  • Bare_trait_objects- ja ellipsis_inclusive_range_patterns-varoitukset siirrettiin virheisiin.

Uutta Rust 1.56:ssa:

  • Cargo.toml:n "[paketti]"-osioon on lisätty rust-versio-kenttä, jonka avulla voit määrittää laatikkopaketille tuetun Rustin vähimmäisversion. Jos nykyinen versio ei vastaa määritettyä parametria, Cargo lakkaa toimimasta virheilmoituksella.
  • Kun kaavoja sovitetaan käyttämällä "binding @ pattern" -lausekkeita, tukea tarjotaan lisäsidosten määrittämiselle (esimerkiksi "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vanh::kutistuu
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • Funktioissa käytetään attribuuttia "const", joka määrittää mahdollisuuden käyttää missä tahansa kontekstissa vakioiden sijaan
    • std::mem::muuntaa
    • [T]::ensimmäinen
    • [T]::jaettu_ensimmäinen
    • [T]::viimeinen
    • [T]::split_last
  • Kääntäjä on vaihdettu käyttämään LLVM-versiota 13.
  • Toinen tukitaso on otettu käyttöön aarch64-apple-ios-sim-alustoille ja kolmas taso powerpc-unknown-freebsd- ja riscv32imc-esp-espidf-alustoille. Kolmas taso sisältää perustuen, mutta ilman automaattista testausta, virallisten koontiversioiden julkaisemista tai sen tarkistamista, voidaanko koodi rakentaa.

Muista, että Rust keskittyy muistin turvallisuuteen, tarjoaa automaattisen muistinhallinnan ja tarjoaa keinon saavuttaa korkea rinnakkaisuus työn suorittamisessa ilman roskankerääjää tai ajonaikaa (ajoaika rajoittuu perusalustukseen ja vakiokirjaston 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.

Lähde: opennet.ru

Lisää kommentti