Rust 1.39 Programming Language Release

publisearre systeem programmeartaal release Roest 1.39, oprjochte troch it Mozilla-projekt. De taal rjochtet him op ûnthâld feiligens, soarget foar automatyske ûnthâld behear, en jout in middel om te kommen ta hege taak parallelism sûnder gebrûk fan in garbage collector of runtime.

Rust's automatyske ûnthâldbehear befrijt de ûntwikkelder fan oanwizermanipulaasje en beskermet tsjin problemen dy't ûntsteane út leechnivo-ûnthâldmanipulaasje, lykas nei-frije ûnthâldtagongen, nul-oanwizer-ferwizings, buffer-oerrin, en sa. 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:

  • Stabilisearre in nije asynchrone programmearring syntaksis basearre op de "async" funksje, de async move { ... } blok, en de ".await" operator, dat makket it makliker om te skriuwen handlers dy't net blokkearje de wichtichste kommando flow. Yn ferliking mei de earder oanbean API foar asynchronous I / O, async / .await konstruksjes binne ienfâldich te begripen, tige lêsber, en kinne jo útfiere komplekse asynchronous ynteraksjes mei help fan bekende flow control techniken basearre op loops, betingsten útspraken en útsûnderings.

    De Async-await syntaksis lit jo funksjes oanmeitsje dy't har útfiering kinne pauze, kontrôle werombringe nei de haadthread, en dan de útfiering ferfetsje fanôf wêr't se ophâlde. Sa'n pauze is bygelyks nedich by it ferwurkjen fan I/O, wêrby't oar wurk dien wurde kin wylst wachtet op it folgjende stik gegevens om te kommen. Funksjes en blokken definieare mei "async fn" en "async move" jouwe in eigenskip werom Takomst, dy't in útstelde asynchrone berekkeningsrepresentaasje definiearret. Jo kinne direkt in útstelde berekkening begjinne en it resultaat krije mei de operator ".await". Gjin aksje wurdt útfierd of foarôf pland oant .await wurdt oanroppen, wêrtroch komplekse nêste konstruksjes kinne wurde makke sûnder ekstra overhead.

    async fn first_function() -> u32 { .. }
    ...
    lit takomst = first_function();
    ...
    lit resultaat: u32 = future.await;

  • Stabilisearre "#![feature(bind_by_move_pattern_guards)]", wêrtroch it gebrûk fan fariabelen mei it binende type "by-move" yn sjabloanen en brûk ferwizings nei dizze fariabelen yn 'e "as" seksje fan 'e útdrukking "wedstriid". Bygelyks, de folgjende konstruksjes binne no tastien:

    fn main() {
    lit array: Box = Box::new([8, 4, 1, 2]);

    match array {
    nums
    if nums.iter().sum::() == 10

    => {
    drop (nûmers);
    }
    _ => net te berikken!(),
    }
    }

  • Yndikaasje tastien attributen by it definiearjen fan funksjeparameters, slutingen en funksjeoanwizers. Betingstlike kompilaasjeattributen (cfg, cfg_attr) dy't diagnostyk kontrolearje fia lint (tastean, warskôgje, wegerje en ferbean) en auxiliary macro calling attributen wurde stipe.

    fn len(
    #[cfg(windows)] slice: &[u16], // brûk de parameter op Windows
    #[cfg(not(windows))] slice: &[u8], // brûke yn oare OS
    ) -> brûke {
    slice.len()
    }

  • Warskôgings oer problemen identifisearre by it kontrolearjen fan it lienen fan fariabelen (lienkontrôler) mei de NLL (Non-Lexical Lifetimes) technyk, oerset yn 'e kategory fatale flaters. Lit ús ûnthâlde dat it ferifikaasjesysteem basearre op in nij meganisme foar it rekkenjen fan it libben fan liende fariabelen it mooglik makke om guon problemen te identifisearjen dy't ûngemurken gongen troch de âlde ferifikaasjekoade. Sûnt flater útfier foar sokke kontrôles koe beynfloedzje komptabiliteit mei earder wurke koade, warskôgings waarden ynearsten útjûn ynstee fan flaters. Warskôgings binne no ferfongen troch flaters by it rinnen yn Rust 2018-modus. Yn 'e folgjende release sil flaterútfier ek ymplementearre wurde yn Rust 2015-modus, dy't úteinlik de âlde lienkontrôler kwytreitsje;
  • It "const"-attribút, dat de mooglikheid bepaalt om yn elke kontekst te brûken ynstee fan konstanten, wurdt brûkt foar de funksjes Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, wrapping_abs en overflowing_abs;

  • In nij diel fan API's is oerbrocht nei de stabile kategory, ynklusyf metoaden dy't binne stabilisearre
    Pin :: into_inner, Instant :: checked_duration_since en Instant :: saturating_duration_since;

  • De frachtpakketbehearder hat no de mooglikheid om de ".toml" tafoeging te brûken foar konfiguraasjebestannen. Foarriedige stipe tafoege foar it bouwen fan de standertbibleteek direkt fan Cargo. De flagge "--wurkromte" tafoege, it ferfangen fan de kontroversjele flagge "--all". In nij fjild is tafoege oan de metadata "publisearje", wêrtroch jo ôfhinklikens kinne publisearje troch in git-tag en ferzjenûmer op te jaan. Testopsje "-Ztimings" tafoege om in HTML-rapport te generearjen fan 'e útfieringstiden fan ferskate kompilaasjestadia.
  • Yn 'e rustc-kompiler befetsje diagnostyske berjochten it trimmen fan' e tails fan koade dy't net yn 'e terminal past. Joech tredde nivo fan stipe foar doelplatfoarms
    i686-unknown-uefi en sparc64-unknown-openbsd. It tredde nivo omfettet basisstipe, mar sûnder automatisearre testen en publikaasje fan offisjele builds.

Boarne: opennet.ru

Add a comment