Rust 1.45 Programming Language Release

publisearre release 1.45 fan 'e systeemprogrammearringstaal Rust, oprjochte troch it Mozilla-projekt. De taal rjochtet him op ûnthâldfeiligens, leveret automatysk ûnthâldbehear, en leveret ark foar it realisearjen fan hege taakparallellisme sûnder in garbage collector en runtime.

It automatyske ûnthâldbehear fan Rust elimineert flaters by it manipulearjen fan oanwizers en beskermet tsjin problemen dy't ûntsteane út manipulaasje fan ûnthâld op leech nivo, lykas tagong krije ta in ûnthâldregio nei't it is befrijd, nul-oanwizers dereferences, bufferoverruns, ensfh. In pakketbehearder wurdt ûntwikkele om bibleteken te fersprieden, assemblage te garandearjen en ôfhinklikens te behearjen troch it projekt. Lading, wêrtroch jo de biblioteken dy't nedich binne foar it programma yn ien klik krije. In repository wurdt stipe om bibleteken te hostjen crates.io.

haad ynnovaasjes:

  • Eliminearre lange-steande flaw by it útfieren fan konversaasjes tusken heule getallen en driuwende kommanûmers. Sûnt de Rust-kompilator LLVM brûkt as backend, waarden typekonverzje-operaasjes útfierd fia LLVM-ynstruksjes foar intermediate koade, lykas fptoui, dy't ien wichtige funksje hawwe - ûndefinieare gedrach as de resultearjende wearde net past yn it doeltype. Bygelyks, by it konvertearjen fan de floatwearde 300 mei type f32 nei it heule getal type u8, is it resultaat ûnfoarspelber en kin ferskille op ferskate systemen. It probleem is dat dizze funksje ferskynt yn koade dy't net as "ûnfeilich" markearre is.

    Fanôf Rust 1.45 wurdt it gedrach fan typegrutte oerstream strikt regele, en de "as" konverzje operaasje kontrolearret op oerstream en twingt de wearde dy't wurdt omboud ta de maksimum of minimale wearde fan it doeltype (foar it foarbyld hjirboppe, in wearde fan 300 soe wurde omboud ta 255). Om sokke kontrôles út te skeakeljen, wurde ekstra API-oanroppen "{f64, f32}::to_int_unchecked" levere, dy't wurkje yn ûnfeilige modus.

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

    fn main() {
    lit too_big = 300.0;
    lit too_small = -100.0;
    let nan = f32::NAN;

    lit x: f32 = 1.0;
    lit y: u8 = ûnfeilich { x.to_int_unchecked() };

    println!("too_big_casted = {}", cast(te_big)); // útfier 255
    println!("too_small_casted = {}", cast(te_small)); // útfier 0
    println!("not_a_number_casted = {}", cast(nan)); // útfier 0
    }

  • Brûk stabilisearre proseduere makrosfunksje-like útdrukkingen, sjabloanen en útspraken. Eartiids koene sokke makro's net oeral neamd wurde, mar allinich yn bepaalde dielen fan 'e koade (as in aparte oprop, net ferweve mei oare koade). It útwreidzjen fan 'e manier wêrop makro's kinne wurde neamd, fergelykber mei funksjes, wie ien fan' e easken om it webramt te wurkjen Raket yn stabile releases fan Rust. Eartiids, it berikken fan ekstra fleksibiliteit yn it definiearjen fan handlers yn Rocket fereasket it ynskeakeljen fan in eksperimintele funksje neamd "proc_macro_hygiene", dat is net beskikber yn stabile ferzjes fan Rust. Dizze funksjonaliteit is no ynboud yn stabile releases fan 'e taal.
  • Tastien berikken te brûken mei type "char" om oer berikwearden te iterearjen (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    foar ch yn 'a'..='z' {
    print!("{}", ch);
    }
    println!(); // Sil "abcdefghijklmnopqrstuvwxyz" printsje

  • In nij diel fan API's is oerbrocht nei de stabile kategory, ynklusyf stabilisearre
    Arc::as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::Swak::as_ptr,
    rc::Swak::from_raw,
    rc::Weak::into_raw,
    str::strip_prefix,
    str::strip_suffix,
    sync::Weak::as_ptr,
    sync::Swak::from_raw,
    sync::Weak::into_raw,
    char::UNICODE_VERSION,
    Span::resolved_at,
    Span::located_at,
    Span::mixed_site,
    unix::proses::CommandExt::arg0.

  • De rustc-kompiler hat stipe tafoege foar it oerskriuwen fan ferskate doelplatfoarmfunksjes mei de flagge "target-feature", bygelyks "-C target-feature=+avx2,+fma". Nije flaggen binne ek tafoege:
    "force-unwind-tabellen" te generearjen unwind call tabellen, nettsjinsteande de crash ôfhanneling strategy; "embed-bitcode" om te kontrolearjen oft LLVM bitcode is opnaam yn oanmakke rlibs. De flagge "embed-bitcode" is standert ynskeakele yn Cargo om bouwtiid en skiifromteferbrûk te optimalisearjen.

  • In tredde nivo fan stipe is levere foar de mipsel-sony-psp en thumbv7a-uwp-windows-msvc platfoarms. It tredde nivo omfettet basisstipe, mar sûnder automatisearre testen en publikaasje fan offisjele builds.

Derneist kin it opmurken wurde it ferhaal oer it meitsjen fan de ienfâldichste apps yn 'e Rust-taal, begjinnend mei it brûken fan de systeembootloader en klear foar selsstannich laden ynstee fan it bestjoeringssysteem.
It artikel is it earste yn in searje wijd oan it demonstrearjen fan techniken dy't yn fraach binne yn programmearring op leech nivo en OS-ûntwikkeling.

Boarne: opennet.ru

Add a comment