Rust 1.53 julkaistu. Google rahoittaa Rust-tuen lisäämistä Linux-ytimeen

Mozilla-projektin perustaman, mutta nyt itsenäisen voittoa tavoittelemattoman järjestön Rust Foundationin alaisuudessa kehitetyn järjestelmäohjelmointikielen Rust 1.53 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 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:

  • Tauluille on otettu käyttöön IntoIterator-ominaisuus, jonka avulla voit järjestää taulukon elementtien iteroinnin arvojen mukaan: for i in [1, 2, 3] { .. }

    On myös mahdollista välittää taulukoita menetelmille, jotka hyväksyvät iteraattorit, esimerkiksi: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Aikaisemmin IntoIterator oli toteutettu vain taulukkoviittauksille, ts. arvojen iterointi vaati viittausten ("&[1, 2, 3]" tai "[1, 2, 3].iter()") käyttöä. IntoIteratorin käyttöönottoa taulukoille vaikeutti yhteensopivuusongelmat, jotka johtuivat aiemmasta kääntäjän muunnoksesta array.into_iter() muotoon (&array).into_iter(). Nämä ongelmat ratkaistiin kiertotavan avulla - kääntäjä jatkaa array.into_iter() muuntamista muotoon (&array).into_iter() ikään kuin IntoIterator-ominaisuutta ei olisi toteutettu, mutta vain kutsuttaessa menetelmää ".into_iter(" )" syntaksi ja koskematta kutsuihin muodossa "in [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3]" )".

  • On mahdollista määrittää lausekkeet "|" (looginen TAI-toiminto) missä tahansa mallin osassa, esimerkiksi "Jotkin(1) | Jotkut(2)" voit nyt kirjoittaa "Some(1 | 2)": hakutulos { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
  • Muiden kuin ASCII-merkkien käyttö tunnisteissa on sallittua, mukaan lukien kaikki Unicode UAX 31 -spesifikaatiossa määritellyt kansalliset merkit, mutta ei emoji-merkkejä. Jos käytät erilaisia ​​mutta samankaltaisia ​​merkkejä, kääntäjä antaa varoituksen. const BLÅHAJ: &str = "🦈"; struct 人 { 名字: Merkkijono, } anna α = 1; letsos = 2; varoitus: tunnisteparin katsotaan sekoittuvan "s" ja "s" välillä
  • Uusi osa API-liittymiä on siirretty vakaaseen luokkaan, mukaan lukien seuraavat stabiloidut:
    • array::from_ref
    • array::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • Kesto::ZERO
    • Kesto::MAX
    • Kesto::on_nolla
    • Kesto::saturating_add
    • Kesto::saturating_sub
    • Kesto::saturating_mul
    • f32::is_subnormal
    • f64::is_subnormal
    • IntoIterator taulukoille
    • {kokonaisluku}::BITS
    • io::Error::Ei tuettu
    • NonZero*::johtavat_nollat
    • Ei-nolla*::nollat
    • Vaihtoehto::lisää
    • Tilaus::is_eq
    • Tilaus::is_ne
    • Tilaus::is_lt
    • Tilaus::is_gt
    • Tilaus::is_le
    • Tilaus::is_ge
    • OsStr::make_ascii_lowercase
    • OsStr::make_ascii_uppercase
    • OsStr::to_ascii_lowercase
    • OsStr::to_ascii_isoilla kirjaimilla
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • slice::IterMut::as_slice
    • AsRef<[T]> slice::IterMutille
    • impl SliceIndex for (Bound , Sidottu )
    • Vanh::extend_from_sisältä
  • Kolmas tukitaso wasm64-tuntematon-tuntematon alustalle on otettu käyttöön. Kolmas taso sisältää perustuen, mutta ilman automaattista testausta, virallisten koontiversioiden julkaisemista tai sen tarkistamista, voidaanko koodi rakentaa.
  • Cargo-pakettien hallinta on oletusarvoisesti siirretty käyttämään nimeä "main" Git-varaston päähaaralle (HEAD). Arkistoissa isännöidyt riippuvuudet, jotka käyttävät nimeä main master sijaan, eivät enää vaadi haara = "main" määrittämistä.
  • Kääntäjässä LLVM:n vähimmäisversion vaatimukset nostetaan LLVM 10:een.

Lisäksi voidaan huomioida rahoituksen myöntäminen rust-kielisten komponenttien kehittämiseen tarkoitettujen työkalujen integroinnin kehittämiseen Linux-ytimeen. Työ toteutetaan Prossimo-projektin puitteissa Let's Encrypt -projektin perustajan ISRG-organisaation (Internet Security Research Group) alaisuudessa. Internet. Varat maksaa Google, joka maksaa Rust-for-Linux-projektin kirjoittajan Miguel Ojedan työn. Aiemmin ISRG ja Google ovat jo rahoittaneet vaihtoehtoisen HTTP-taustajärjestelmän luomista curl-apuohjelmalle ja uuden TLS-moduulin kehittämistä Apache http -palvelimelle.

Microsoftin ja Googlen mukaan noin 70 % haavoittuvuuksista johtuu muistin vaarallisesta käsittelystä. Odotetaan, että Rust-kielen käyttäminen ytimen komponenttien, kuten laiteajurien, kehittämiseen vähentää vaarallisen muistin käsittelyn aiheuttamien haavoittuvuuksien riskiä ja eliminoi virheet, kuten muistialueen käytön sen vapauttamisen jälkeen ja puskurin rajojen ylittämisen.

Muistiturvallista käsittelyä tarjotaan Rustissa käännöshetkellä referenssitarkistuksen, objektin omistajuuden ja objektin käyttöiän (laajuus) seurantaan sekä muistin käytön oikeellisuuden arviointiin 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.

Lähde: opennet.ru

Lisää kommentti