Rust 1.73 ohjelmointikielen julkaisu

Yleiskäyttöinen ohjelmointikieli Rust 1.73, joka on perustettu Mozilla-projektilla, mutta nyt kehitetty riippumattoman voittoa tavoittelemattoman järjestön Rust Foundationin alaisuudessa, on julkaistu. Kieli keskittyy muistin turvallisuuteen ja tarjoaa välineet korkean työn rinnakkaisuuden saavuttamiseen välttäen samalla roskankeräimen ja ajonajan käyttöä (ajoaika rajoittuu vakiokirjaston perusalustukseen ja ylläpitoon).

Rustin muistinkäsittelymenetelmät säästävät kehittäjää virheiltä osoittimia käsiteltäessä ja suojaavat ongelmilta, jotka johtuvat matalan tason muistin käsittelystä, kuten muistialueen käyttäminen sen vapauttamisen jälkeen, nollaosoittimien viittauksen poistaminen, puskurin ylitykset jne. Kirjastojen jakelua, koontiversioiden tarjoamista ja riippuvuuksien hallintaa varten projekti kehittää Cargo-pakettien hallintaa. Crates.io-tietovarastoa tuetaan kirjastojen isännöintiin.

Muistin turvallisuutta tarjotaan Rustissa käännöshetkellä referenssitarkistuksen, objektin omistajuuden, objektien eliniän (laajuuden) kirjaamisen ja muistin käytön oikeellisuuden arvioimisen avulla koodin suorittamisen aikana. Ruoste tarjoaa myös suojan kokonaislukujen ylivuodoilta, vaatii muuttujien arvojen pakollisen alustamisen ennen käyttöä, käsittelee virheet paremmin standardikirjastossa, soveltaa oletusarvoisesti muuttumattomien viitteiden ja muuttujien käsitettä, tarjoaa vahvan staattisen kirjoittamisen loogisten virheiden minimoimiseksi.

Tärkeimmät innovaatiot:

  • Oletusohjelman kaatumiskäsittelijän (paniikki) lähettämien viestien muoto on suunniteltu uudelleen. "Panic!"-makron teksti näkyy nyt erillisellä rivillä ilman lainausmerkkejä, mikä helpottaa viestin lukemista ja poistaa sekaannusta, kun sisäkkäisiä lainausmerkkejä on tai jaettu useille riveille. fn main() { anna tiedosto = "ferris.txt"; paniikki!("Voi ei! {tiedostoa:?} ei löydy!"); } Oli säiettä 'main', joka panikoi 'voi ei! "ferris.txt" ei löydy!', src/main.rs:3:5 Säie 'main' panikoi src/main.rs:3:5: voi ei! "ferris.txt" ei löytynyt!

    Myös "assert_eq"- ja "assert_ne"-makrojen laukaisun yhteydessä näytettävät viestit on muokattu. fn main() { assert_eq!("🦀", "🐟", "ferris ei ole kala"); } Säie 'main' oli paniikissa "väite epäonnistui": `(vasen == oikea)` vasen: `"🦀"`, oikea: `"🐟"`: Ferris ei ole kala', src/main.rs: 2 :5 Thread 'main' paniikissa osoitteessa src/main.rs:2:5: väite `vasen == oikea` epäonnistui: Ferris ei ole kala vasemmalla: "🦀" oikealla: "🐟"

  • RFC 3184:n mukaisesti on lisätty mahdollisuus suoraan käsitellä säikeen paikallisia (thread_local) LocalKey-tallennusavaimia. > ja LocalKey > käyttämällä get(), set(), take() ja korvaa() -menetelmiä sen sijaan, että käytettäisiin "with(|inner| ...)" -sulkemista, mikä eliminoi oletusarvon lisäalustuskoodin tarpeen uusille säikeille määritetyt arvot käytettäessä makroa "thread_local!" lanka_paikallinen! { staattiset ASIAT: Solu > = Solu::uusi(Vec::uusi()); } fn f() { // oli ASIAT.with(|i| i.set(vec![32, 1, 2])); // muuttui THINGS.set(vec![3, 1, 2]); // ... // annettiin v = THINGS.with(|i| i.take()); // tuli let v: Vec = ASIAT.take(); }
  • Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
    • Allekirjoittamaton {integer}::div_ceil
    • Allekirjoittamaton {integer}::next_multiple_of
    • Allekirjoittamaton {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::hanki
    • LocalKey:: >::set
    • LocalKey:: >::ota
    • LocalKey:: >::korvaa
    • LocalKey:: >::lainalla
    • LocalKey:: >::with_laina_mut
    • LocalKey:: >::set
    • LocalKey:: >::ota
    • LocalKey:: >::korvaa
  • "const"-attribuuttia, joka määrittää mahdollisuuden käyttää missä tahansa kontekstissa vakioiden sijaan, käytetään funktioissa:
    • rc::Heikko::uusi
    • synkronointi::Heikko::uusi
    • NonNull::as_ref
  • Kääntäjä tallentaa versiotiedot ".comment"-osioon, kuten GCC ja Clang.
  • Kolmas tukitaso on otettu käyttöön alustoille aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl ja x86_64-unknown-linux - oho. Kolmas taso sisältää perustuen, mutta ilman automaattista testausta, virallisten koontiversioiden julkaisemista tai sen tarkistamista, voidaanko koodi rakentaa.
  • Toinen tukitaso kohdealustalle wasm32-wasi-preview1-threads on otettu käyttöön. Toinen tukitaso sisältää asennustakuun.

Lähde: opennet.ru

Lisää kommentti