Rust 1.38 ohjelmointikielen julkaisu

julkaistu järjestelmän ohjelmointikielen julkaisu Ruoste 1.38, jonka perusti Mozilla-projekti. Kieli keskittyy muistin turvallisuuteen, tarjoaa automaattisen muistinhallinnan ja tarjoaa keinon saavuttaa korkea tehtävien rinnakkaisuus ilman roskankerääjää tai ajonaikaa.

Rustin automaattinen muistinhallinta vapauttaa kehittäjän osoittimien manipuloinnista ja suojaa matalan tason muistin käsittelystä johtuvilta ongelmilta, kuten jälkivapailta muistin hauilta, nollaosoittimen viittauksilta, puskurin ylityksiltä ja vastaavilta. Paketinhallintaa kehitetään kirjastojen jakamiseen, kokoamisen varmistamiseen ja riippuvuuksien hallintaan projektin toimesta. lasti, jonka avulla voit saada ohjelman tarvitsemat kirjastot yhdellä napsautuksella. Arkisto on tuettu isäntäkirjastoille laatikot.io.

Pääasiallinen innovaatioita:

  • Lisätty liukuhihnamuotoinen käännöstila (liukuhihna), jossa riippuvaisen laatikkopaketin rakentaminen alkaa heti, kun riippuvuuden metatiedot tulevat saataville, odottamatta sen käännöksen valmistumista. Pakettia käännettäessä riippuvuuksia ei tarvitse koota kokonaan, riittää, kun määritetään metatiedot, jotka sisältävät luettelot tyypeistä, riippuvuuksista ja vietyistä elementeistä. Metadata on saatavilla käännösprosessin varhaisessa vaiheessa, joten linkitetyt paketit voidaan nyt koota paljon aikaisemmin. Yksittäisiä paketteja rakennettaessa ehdotettu tila ei vaikuta suorituskykyyn, mutta jos koontiversio kattaa paketteja, joilla on haarautuneita riippuvuuksia, kokonaisrakennusaikaa voidaan lyhentää 10-20 %;
  • Varmistaa toimintojen virheellisen käytön havaitsemisen std::mem::alustamaton и std::mem::nollattu. Esimerkiksi std::mem::uninitialized on kätevä taulukoiden nopeaan luomiseen, mutta se johtaa kääntäjää harhaan, koska se näyttää olevan alustettu, mutta todellisuudessa arvo pysyy alustamattomana. Mem::uniniitialized-funktio on jo merkitty vanhentuneeksi ja sen sijaan on suositeltavaa käyttää välityyppiä Ehkä yksikkö. Mitä tulee mem::zeroediin, tämä toiminto voi aiheuttaa ongelmia tyypeissä, jotka eivät hyväksy nolla-arvoja.

    Määrittämättömän toiminnan tunnistamisen helpottamiseksi uusi julkaisu lisää kääntäjään nukkatarkistuksen, joka havaitsee mem::uninitialized- tai mem::zeroed-ongelmia. Saat nyt esimerkiksi virheilmoituksen, kun yrität käyttää komentoa mem::uninitialized tai mem::zeroed tyypeillä &T ja Box‹T›, jotka edustavat osoitinobjekteja, jotka eivät voi hyväksyä nolla-arvoja.

  • Attribuutti "#[deprecated]" on laajennettu, jotta laatikkopaketit voidaan merkitä vanhentuneiksi ja ajoittaa poistettaviksi. Rust 1.38:sta lähtien tätä attribuuttia voidaan käyttää myös makroille;
  • Lisätty mahdollisuus käyttää "#[global_allocator]"-attribuuttia alimoduuleissa;
  • Lisätty toiminto std::mikä tahansa::tyypin_nimi, jonka avulla voit selvittää tyypin nimen, mikä voi olla hyödyllistä virheenkorjaustarkoituksiin. Esimerkiksi ohjelman suorituksen aikana voit selvittää, minkä tyyppistä toimintoa kutsuttiin:

    fn gen_value‹T: Oletus>() -› T {
    println!("Alustetaan esiintymä {}", std::any::type_name::‹T›());
    Oletus::default()
    }

    fnmain() {
    anna _: i32 = gen_arvo(); # "i32" tulostetaan
    anna _: Merkkijono = gen_arvo(); # tulostaa "alloc::string::String"
    }

  • Vakiokirjaston laajennetut toiminnot:
    • slice::{concat, connect, join} voi nyt ottaa arvon &[T] &T;
    • "*const T" ja "*mut T" toteuttavat nyt merkin::Unpin;
    • "Arc‹[T]›" ja "Rc‹[T]›" toteuttavat nyt FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} ottaa nyt käyttöön DoubleEndedIteratorin.
    • ascii::EscapeDefault toteuttaa kloonauksen ja näytön.
  • Uusi osa API:ista on siirretty vakaaseen luokkaan, mukaan lukien stabiloidut menetelmät
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Kesto::as_secs_f{32|64},
    • Kesto::div_duration_f{32|64},
    • Kesto::div_f{32|64},
    • Kesto::from_secs_f{32|64},
    • Kesto::mul_f{32|64},
    • divisioonan toiminnot ja loput
      div_euclid ja rem_euclid kaikille kokonaislukuprimitiiveille;

  • Lisätty tuki "--features"-vaihtoehdon määrittämiselle useita kertoja eri ominaisuuksien mahdollistamiseksi rahtipakettien hallinnassa;
  • Kääntäjä tarjoaa kolmannen taso tuki kohdealustoille aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc targets,-mlinuxvc -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl ja riscv7i-unknown-none-elf. Kolmas taso sisältää perustuen, mutta ilman automaattista testausta ja virallisten koontiversioiden julkaisemista.

Lähde: opennet.ru

Lisää kommentti