Rust 1.68 ohjelmointikielen julkaisu

Yleiskäyttöinen ohjelmointikieli Rust 1.68, 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:

  • Cargo-pakettien hallintaohjelmassa ja crates.io-varastossa on vakiintunut tuki Sparse-protokollalle, joka määrittelee uuden tavan työskennellä indeksin kanssa, joka heijastaa kaikkien arkistossa olevien pakettien saatavilla olevia versioita. Uuden protokollan avulla voit merkittävästi nopeuttaa työskentelyä crates.io:n kanssa ja ratkaista skaalausongelmia arkistossa olevien pakettien määrän kasvaessa.

    Täydellisen indeksin lataamisen aiheuttamien viiveiden vähentämiseksi Sparse sen sijaan, että pääsisi hakemistoon Gitin avulla, lataa HTTPS:n kautta vain tarvittavat indeksitiedot, jotka kattavat tietyn projektin riippuvuudet. Uutta palvelua, index.crates.io, käytetään hakemistotietojen tarjoamiseen. Oletusarvoisesti uutta protokollaa on suunniteltu käytettäväksi Rust 1.70 -haarassa, ja sitä ennen voit ottaa sen käyttöön asettamalla ympäristömuuttujan "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" tai lisäämällä "[rekistereihin" parametrin 'protocol ='. crates-io]"-osio .cargo/config.toml-tiedostosta 'sparse'.

  • Lisätty "pin!"-makro, jonka avulla voit luoda Pin<&mut T> -rakenteen lausekkeesta "T" sen tilan paikallisella kiinnityksellä (toisin kuin Box::pin, se ei varaa muistia kasaan, vaan sitoo pinotasolla).
  • Muistinvarausvirheen oletuskäsittelijä on ehdotettu käytettäväksi käytettäessä vakiovarauspakettia. Sovellukset, jotka sallivat vain alloc-toiminnon (ilman std:tä), kutsuvat nyt "panic!"-käsittelijää, kun muistin varaus epäonnistuu, mikä voidaan valinnaisesti siepata käyttämällä "#[panic_handler]". Std-kirjastoa käyttävät ohjelmat jatkavat virhetietojen tulostamista stderriin ja kaatuvat.
  • Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
    • {core,std}::pin::pin!
    • impl From for {f32,f64}
    • std::polku::MAIN_SEPARATOR_STR
    • impl DerefMut PathBufille
  • VecDeque::new-funktiossa käytetään attribuuttia “const”, joka määrittää mahdollisuuden käyttää sitä missä tahansa kontekstissa vakioiden sijaan.
  • Android-alustalla toimimiseen tarvitaan nyt vähintään NDK r25 (API 19), ts. Pienin tuettu Android-versio on nostettu 4.4:ään (KitKat).
  • Kolmas tukitaso on otettu käyttöön Sony PlayStation Vita -alustalle (armv7-sony-vita-newlibeabihf). Kolmas taso sisältää perustuen, mutta ilman automaattista testausta, virallisten koontiversioiden julkaisemista tai sen tarkistamista, voidaanko koodi rakentaa.

Lähde: opennet.ru

Lisää kommentti