järjestelmän ohjelmointikielen versio 1.45 , jonka perusti Mozilla-projekti. Kieli keskittyy muistin turvallisuuteen, tarjoaa automaattisen muistinhallinnan ja tarjoaa työkaluja korkean tehtävien rinnakkaisuuden saavuttamiseen ilman roskakeräystä ja .
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. , jonka avulla voit saada ohjelman tarvitsemat kirjastot yhdellä napsautuksella. Arkisto on tuettu isäntäkirjastoille .
Pääasiallinen :
- Pitkäaikainen ongelma on ratkaistu suoritettaessa muunnoksia kokonaislukujen ja liukulukujen välillä. Koska Rust-kääntäjä käyttää LLVM:ää taustajärjestelmänä, tyyppimuunnosoperaatiot suoritettiin LLVM:n välikoodikäskyjen avulla, kuten , joilla on yksi merkittävä ominaisuus: määrittelemätön käyttäytyminen, jos tuloksena oleva arvo ei sovi kohdetyyppiin. Esimerkiksi muunnettaessa liukulukuarvoa 300, jonka tyyppi on f32, kokonaislukutyypiksi u8, tulos on arvaamaton ja voi vaihdella eri järjestelmien välillä. Ongelmana on, että tämä käyttäytyminen ilmenee koodissa, jota ei ole merkitty "vaaralliseksi".
Rust 1.45:stä alkaen toiminta tyypin koon ylityksen yhteydessä on tarkasti määritelty, ja "as"-muunnosoperaattori tarkistaa ylivuodon ja muuntaa muunnetun arvon kohdetyypin suurimmaksi tai pienimmäksi arvoksi (yllä olevassa esimerkissä arvo 300 muunnetaan arvoksi 255). Tällaisten tarkistusten poistamiseksi käytöstä tarjotaan lisä-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_pieni = -100.0;
olkoon nan = f32::NAN;olkoon x: f32 = 1.0;
olkoon y: u8 = epäluotettava { x.to_int_unchecked() };println!("liian_iso_valettu = {}", cast(liian_iso)); // tuloste 255
println!("liian_pieni_valettu = {}", cast(liian_pieni)); // tuloste 0
println!("ei_numeroa_valattu = {}", cast(nan)); // tuloste 0
} - Käyttö on vakiintunut , samoin kuin funktiot, lausekkeissa, malleissa ja väitteissä. Aiemmin tällaisia makroita voitiin kutsua vain tietyissä koodin osissa (erillisenä kutsuna, ei liitettynä muuhun koodiin). Funktion kaltaisten makroiden kutsutapojen laajentaminen oli yksi verkkokehyksen toiminnan vaatimuksista. vakaissa Rust-versioissa. Aiemmin käsittelijöiden määrittelyn joustavuuden lisääminen Rocketissa edellytti kokeellisen "proc_macro_hygiene"-ominaisuuden käyttöönottoa, jota ei ole saatavilla vakaissa Rust-versioissa. Tämä toiminto on nyt sisäänrakennettu vakaisiin kieliversioihin.
- Tyypin "char" mukaisia alueita saa käyttää iterointiin aluearvojen yli (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
ch:lle 'a':ssa..='z' {
tulosta!(«{}», ketju);
}
println!(); // Tulostaa "abcdefghijklmnopqrstuvwxyz" - Uusi osa API:ista on siirretty vakaaseen luokkaan, mukaan lukien stabiloidut
Arc::as_ptr,
BTreeMap::poista_entry,
Rc::as_ptr,
rc::Heikko::as_ptr,
rc::Heikko::from_raw,
rc::Heikko::into_raw,
merkkijono::nauhan_etuliite,
merkkijono::strip_pääte,
sync::Heikko::as_ptr,
synkronointi::Heikko::from_raw,
sync::Heikko::into_raw,
char::UNICODE_VERSIO,
Span::resolved_at,
Span::located_at,
Span::mixed_site,
unix::process::CommandExt::arg0. - rustc-kääntäjä tukee nyt eri kohdealustan ominaisuuksien ohittamista "target-feature"-lipun avulla, esimerkiksi "-C target-feature=+avx2,+fma". Myös uusia lippuja on lisätty:
"force-unwind-tables" purkauskutsutaulukoiden luomiseen kaatumisten käsittelystrategiasta riippumatta; "embed-bitcode" LLVM-bittikoodin sisällyttämisen hallintaan luotuihin rlib-tiedostoihin. "Embed-bitcode"-lippu on oletusarvoisesti käytössä Cargossa käännösajan ja levytilan kulutuksen optimoimiseksi. - Tason 3 tuki on otettu käyttöön mipsel-sony-psp- ja thumbv7a-uwp-windows-msvc-alustoille. Taso 3 tarjoaa perustason tuen, mutta ei sisällä automaattista testausta tai virallisia koontiversioita.
Lisäksi voidaan huomauttaa yksinkertaisimman luomisesta kirjoitettu Rust-kielellä, käynnistetty järjestelmän käynnistyslataimen avulla ja valmis käynnistymään itsenäisesti käyttöjärjestelmän sijaan.
Tämä artikkeli on ensimmäinen sarjassa, joka on omistettu matalan tason ohjelmoinnissa ja käyttöjärjestelmäkehityksessä käytettyjen tekniikoiden esittelylle.
Lähde: opennet.ru
