Rust 1.36 Programming Language Release

publisearre systeem programmeartaal release Roest 1.36, 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:

  • Trait stabilisearre Takomst, dy't in wearde fertsjintwurdiget wêrfan de evaluaasje noch net foltôge is by it brûken fan async / .await-blokken. Asynchrone wearden definieare mei Future meitsje it mooglik om troch te gean mei it útfieren fan nuttich wurk yn 'e thread, wylst tagelyk wachtsje op it foltôgjen fan berekkeningen fan in bepaalde wearde;
  • Bibleteek stabilisearre alloc, dy't tûke oanwizers en kolleksjes leveret foar it behearen fan ûnthâld-allokearre wearden. Unthâldallokaasje yn std brûkt no it type In ding, dy't wurde opnij eksportearre út alloc. Apart gebrûk fan alloc makket sin yn applikaasjes dy't net ferbûn binne oan std ("#![no_std]"), lykas ek yn biblioteken ûntwurpen foar gebrûk yn ferlykbere programma's sûnder std;
  • Om kontrôles foar korrekte inisjalisaasje fan wearden te omgean foarsteld tuskenlizzende type Miskien Unit, dat kin brûkt wurde ynstee fan de mem :: uninitialized funksje as in feiliger alternatyf. De mem :: uninitialized funksje is handich foar in fluch meitsjen arrays, mar it misliedt de gearstaller omdat it liket te hawwen inisjalisearre, mar yn werklikheid bliuwt de wearde uninitialized. MaybeUninit lit jo eksplisyt oanjaan oan 'e gearstaller dat de wearde net is inisjalisearre, om rekken te hâlden mei it mooglike ûndefinieare gedrach ferbûn mei dit, en ek kontrôles yn programma's te organisearjen fia "miskien_t:" en stap-foar-stap inisjalisaasje, markearje syn foltôging mei help fan de ".assume_init()" oprop. Mei de komst fan MaybeUninit is de mem :: uninitialisearre funksje ôfret en wurdt net oanrikkemandearre foar gebrûk;
  • De NLL (Non-Lexical Lifetimes) technyk, dy't it systeem útwreide foar it opnimmen fan it libben fan liende fariabelen, is stabilisearre foar de Rust 2015-taal (yn earsten waard NLL allinich stipe troch Rust 2018). Yn stee fan it begean fan libbenstiden op it leksikale nivo, docht NLL dat op it nivo fan 'e set oanwizers yn' e útfieringsstreamgrafyk. Dizze oanpak lit jo de kwaliteit fan it kontrolearjen fan it lienen fan fariabelen (lienekontrôler) ferheegje en de útfiering fan guon soarten korrekte koade tastean, wêrfan it gebrûk earder late ta in flater. It nije gedrach makket ek debuggen folle makliker;
  • Nije ymplemintaasje fan assosjative arrays ynbegrepen HashMap, basearre op de tapassing fan 'e struktuer Switserske tabel (automatysk laden hashbrown :: HashMap, útsein as eksplisyt oars oanjûn, bygelyks std :: HashMap, dat is basearre op SipHash 1-3). De software-ynterface bliuwt itselde, en de ferskillen dy't merkber binne foar de ûntwikkelder komme ta ferhege prestaasjes en fermindere ûnthâldferbrûk;
  • Yn it pakket manager lading tafoege de opsje "--offline", dy't operaasje mooglik makket sûnder tagong ta it netwurk, wêryn allinich pakketten yn 'e cache yn it lokale systeem brûkt wurde by it ynstallearjen fan ôfhinklikens. As de ôfhinklikens net yn 'e lokale cache is, sil in flater wurde smiten. Om ôfhinklikens foar te laden yn 'e lokale cache foardat jo offline gean, kinne jo it kommando "cargo fetch" brûke;
  • Implementearre de mooglikheid om de makro "dbg!" ferskate arguminten oanjaan;
  • It attribút "const", dat de mooglikheid bepaalt om yn elke kontekst te brûken ynstee fan konstanten, wurdt brûkt foar metoaden
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull :: dangling en
    NonNull::cast;

  • In nij diel fan API's is oerbrocht nei de stabile kategory, ynklusyf metoaden dy't binne stabilisearre
    task::Waker, task::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Lês::read_vectored, Skriuw::write_vectored,
    Iterator::copied,
    BorrowMut (foar snaren) en str::as_mut_ptr.

Boarne: opennet.ru

Add a comment