Rust 1.45 ohjelmointikielen julkaisu

julkaistu järjestelmän ohjelmointikielen versio 1.45 Ruoste, jonka perusti Mozilla-projekti. Kieli keskittyy muistin turvallisuuteen, tarjoaa automaattisen muistinhallinnan ja tarjoaa työkaluja korkean tehtävien rinnakkaisuuden saavuttamiseen ilman roskakeräystä ja runtime.

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. 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:

  • Eliminoitunut pitkään vika suoritettaessa muunnoksia kokonaislukujen ja liukulukujen välillä. Koska Rust-kääntäjä käyttää LLVM:ää taustaohjelmana, tyyppimuunnostoiminnot suoritettiin LLVM-välikoodiohjeiden, kuten esim. fptoui, joilla on yksi merkittävä ominaisuus - määrittelemätön käyttäytyminen, jos tuloksena oleva arvo ei sovi kohdetyyppiin. Esimerkiksi kun muunnetaan liukulukuarvo 300 tyypillä f32 kokonaislukutyypiksi u8, tulos on arvaamaton ja voi vaihdella eri järjestelmissä. Ongelmana on, että tämä ominaisuus näkyy koodissa, jota ei ole merkitty "turvattomaksi".

    Rust 1.45:stä lähtien tyyppikoon ylivuoto on tiukasti säädelty, ja "as"-muunnostoiminto tarkistaa ylivuodon ja pakottaa arvon muunnettavaksi kohdetyypin maksimi- tai minimiarvoksi (yllä olevassa esimerkissä arvo 300 muunnetaan 255:ksi). Tällaisten tarkistusten poistamiseksi käytöstä tarjotaan ylimääräisiä API-kutsuja "{f64, f32}::to_int_unchecked", jotka toimivat vaarallisessa tilassa.

    fn cast(x: f32) -> u8 {
    x kuin u8
    }

    fnmain() {
    anna liian_iso = 300.0;
    anna liian_small = -100.0;
    anna nan = f32::NAN;

    olkoon x: f32 = 1.0;
    anna y: u8 = vaarallinen { x.to_int_unchecked() };

    println!("liian_big_casted = {}", cast(liian_iso)); // lähtö 255
    println!("too_small_casted = {}", cast(liian_small)); // lähtö 0
    println!("not_a_number_casted = {}", cast(nan)); // lähtö 0
    }

  • Käytä stabiloitua prosessimakrotfunktion kaltaisia ​​lausekkeita, malleja ja lausekkeita. Aikaisemmin tällaisia ​​makroja ei voitu kutsua kaikkialla, vaan vain tietyissä koodin osissa (erillisenä kutsuna, ei kietoutunut toiseen koodiin). Makrojen kutsumistavan laajentaminen funktioiden tapaan oli yksi vaatimuksista, jotta verkkokehys toimisi. Raketti Rustin vakaissa julkaisuissa. Aikaisemmin lisäjoustavuuden saavuttaminen käsittelijöiden määrittelyssä Rocketissa edellytti "proc_macro_hygiene"-nimisen kokeellisen ominaisuuden käyttöönottoa, joka ei ole saatavilla Rustin vakaissa versioissa. Tämä toiminto on nyt sisäänrakennettu kielen vakaisiin julkaisuihin.
  • Saa käyttää "char"-tyyppisiä alueita alueen arvojen toistamiseen (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    ch:lle ​​'a'..='z' {
    tulosta!("{}", ch);
    }
    println!(); // Tulostaa "abcdefghijklmnopqrstuvwxyz"

  • Uusi osa API:ista on siirretty vakaaseen luokkaan, mukaan lukien stabiloidut
    Arc::as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::Heikko::as_ptr,
    rc::Heikko::from_raw,
    rc::Heikko::into_raw,
    str::strip_prefix,
    str::strip_suffix,
    synkronointi::Heikko::as_ptr,
    synkronointi::Heikko::from_raw,
    synkronointi::Heikko::raakaksi,
    char::UNICODE_VERSION,
    Span::resolved_at,
    Span::located_at,
    Span::mixed_site,
    unix::prosessi::CommandExt::arg0.

  • Rustc-kääntäjä on lisännyt tuen erilaisten kohdealustan ominaisuuksien ohittamiseen käyttämällä "target-feature" -lippua, esimerkiksi "-C target-feature=+avx2,+fma". Uusia lippuja on myös lisätty:
    "force-unwind-tables" purkamiskutsutaulukoiden luomiseksi kaatumisenhallintastrategiasta riippumatta; "embed-bitcode" ohjaa, sisällytetäänkö LLVM-bittikoodi luotuihin rlib-tiedostoihin. "Embed-bitcode" -lippu on oletusarvoisesti käytössä Cargossa rakennusajan ja levytilan kulutuksen optimoimiseksi.

  • Kolmas tukitaso on tarjottu mipsel-sony-psp- ja thumbv7a-uwp-windows-msvc-alustoille. Kolmas taso sisältää perustuen, mutta ilman automaattista testausta ja virallisten koontiversioiden julkaisemista.

Lisäksi voidaan huomauttaa tarina yksinkertaisimman luomisesta приложения Rust-kielellä, järjestelmän käynnistyslataimen käytön aloittaminen ja valmiina itsenäiseen lataukseen käyttöjärjestelmän sijaan.
Artikkeli on ensimmäinen sarjassa, joka on omistettu matalan tason ohjelmoinnin ja käyttöjärjestelmän kehityksen vaativien tekniikoiden esittelyyn.

Lähde: opennet.ru

Lisää kommentti