Rust 1.45 Programming Language Release

gepubliseer vrystelling 1.45 van die stelselprogrammeertaal Rustgestig deur die Mozilla-projek. Die taal fokus op veilige geheuebestuur, verskaf outomatiese geheuebestuur, en verskaf die middele om hoΓ« werkparallelisme te bereik terwyl die gebruik van 'n vullisverwyderaar en runtime.

Rust se outomatiese geheuebestuur red die ontwikkelaar van foute wanneer wysers gemanipuleer word en beskerm teen probleme wat ontstaan ​​as gevolg van laevlakgeheuemanipulasie, soos toegang tot 'n geheuearea nadat dit vrygestel is, herkenning van nulwysers, bufferoorskryding, ens. Om biblioteke te versprei, samestelling te verseker en afhanklikhede te bestuur, ontwikkel die projek 'n pakketbestuurder Cargo, wat jou in staat stel om die biblioteke wat jy nodig het vir die program in een klik te kry. 'n Bewaarplek word ondersteun om biblioteke te huisves kratte.io.

Die belangrikste innovasies:

  • Langdurige uitgeskakel fout wanneer omskakelings tussen heelgetalle en swaaipuntgetalle uitgevoer word. Aangesien die Rust-samesteller LLVM as 'n backend gebruik, is tipe-omskakelingsbewerkings uitgevoer deur middel van LLVM-tussenkode-instruksies soos bv. fptoui, wat een beduidende kenmerk het - ongedefinieerde gedrag as die resulterende waarde nie by die teikentipe pas nie. Byvoorbeeld, wanneer die dryfwaarde 300 met tipe f32 na heelgetaltipe u8 omgeskakel word, is die resultaat onvoorspelbaar en kan dit op verskillende stelsels verskil. Die probleem is dat hierdie kenmerk verskyn in kode wat nie as "onveilig" gemerk is nie.

    Vanaf Roes 1.45 word die gedrag van tipe grootte oorloop streng gereguleer, en die "as" omskakeling kontroleer vir oorloop en dwing die waarde wat omgeskakel word na die maksimum of minimum waarde van die teiken tipe (vir die voorbeeld hierbo, 'n waarde van 300 sal omgeskakel word na 255). Om sulke kontroles te deaktiveer, word bykomende API-oproepe "{f64, f32}::to_int_unchecked" verskaf, wat in onveilige modus werk.

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

    fn hoof() {
    laat te_groot = 300.0;
    laat te_klein = -100.0;
    laat nan = f32::NAN;

    laat x: f32 = 1.0;
    laat y: u8 = onveilig { x.to_int_unchecked() };

    println!("too_big_casted = {}", cast(te_big)); // uitvoer 255
    println!("too_small_casted = {}", cast(te_klein)); // uitvoer 0
    println!("nie_'n_nommer_uitgegooi = {}", cast(nan)); // uitvoer 0
    }

  • Gebruik gestabiliseer prosedurele makro'sfunksieagtige uitdrukkings, sjablone en stellings. Voorheen kon sulke makro's nie oral opgeroep word nie, maar slegs in sekere dele van die kode (as 'n aparte oproep, nie vervleg met ander kode nie). Die uitbreiding van die manier waarop makro's geroep kan word, soortgelyk aan funksies, was een van die vereistes om die webraamwerk te laat werk Rocket in stabiele vrystellings van Rust. Voorheen het die bereiking van bykomende buigsaamheid in die definisie van hanteerders in Rocket vereis dat 'n eksperimentele kenmerk genaamd "proc_macro_hygiene" moontlik gemaak word, wat nie in stabiele weergawes van Rust beskikbaar is nie. Hierdie funksionaliteit is nou ingebou in stabiele vrystellings van die taal.
  • Word toegelaat om reekse met tipe "char" te gebruik om oor reekswaardes te herhaal (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    vir ch in 'a'..='z' {
    druk!("{}", ch);
    }
    println!(); // Sal "abcdefghijklmnopqrstuvwxyz" druk

  • 'n Nuwe gedeelte van API's is na die stabiele kategorie oorgeplaas, insluitend gestabiliseer
    Arc::as_ptr,
    BTreeMap::verwyder_inskrywing,
    Rc::as_ptr,
    rc::Swak::as_ptr,
    rc::Swak::from_raw,
    rc::Swak::into_raw,
    str::strook_voorvoegsel,
    str::strook_agtervoegsel,
    sync::Swak::as_ptr,
    sync::Swak::from_raw,
    sync::Swak::into_raw,
    char::UNICODE_VERSION,
    Span::resolved_at,
    Span::geleΓ«_by,
    Span::gemengde_werf,
    unix::proces::CommandExt::arg0.

  • Die rustc-samesteller het ondersteuning bygevoeg om verskeie teikenplatformkenmerke te ignoreer deur die "target-feature" vlag te gebruik, byvoorbeeld "-C target-feature=+avx2,+fma". Nuwe vlae is ook bygevoeg:
    "force-unwind-tables" om ontwikkeloproeptabelle te genereer, ongeag die ongelukhanteringstrategie; "embed-bitcode" om te beheer of LLVM-biskode by gegenereerde rlibs ingesluit is. Die "embed-bitcode"-vlag is by verstek in Cargo geaktiveer om boutyd en skyfspasieverbruik te optimaliseer.

  • 'n Derde vlak van ondersteuning is verskaf vir die mipsel-sony-psp en thumbv7a-uwp-windows-msvc platforms. Die derde vlak behels basiese ondersteuning, maar sonder outomatiese toetsing en publikasie van amptelike bouwerk.

Daarbenewens kan dit opgemerk word die verhaal oor die skep van die eenvoudigste programme in die Rust-taal, begin met die gebruik van die stelsel selflaaiprogram en gereed vir selfstandige laai in plaas van die bedryfstelsel.
Die artikel is die eerste in 'n reeks wat toegewy is aan die demonstrasie van tegnieke wat in aanvraag is in laevlak-programmering en OS-ontwikkeling.

Bron: opennet.ru

Voeg 'n opmerking