Rust 1.57 Programming Language Release

De frijlitting fan de systeemprogrammearringstaal Rust 1.57, oprjochte troch it Mozilla-projekt, mar no ûntwikkele ûnder auspysjes fan de ûnôfhinklike non-profit organisaasje Rust Foundation, is publisearre. De taal rjochtet him op ûnthâld feilichheid, jout automatyske ûnthâld behear, en jout de middels te berikken hege taak parallelism sûnder in gebrûk garbage collector of runtime (runtime wurdt redusearre ta basis inisjalisaasje en ûnderhâld fan de standert bibleteek).

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. Om bibleteken te fersprieden, assemblage te garandearjen en ôfhinklikens te behearjen, ûntwikkelet it projekt de Cargo-pakketbehearder. It crates.io repository wurdt stipe foar hosting fan bibleteken.

Wichtichste ynnovaasjes:

  • It gebrûk fan 'e "panyk!" Makro is stabilisearre. yn konteksten makke by kompilaasje, lykas "const fn" deklaraasjes. Derneist, neist it brûken fan "panyk!" const-ferklearrings tastean it gebrûk fan 'e makro "assert!". en guon oare standert bibleteek APIs. Stabilisaasje beslacht noch net de heule opmaakynfrastruktuer, dus yn syn hjoeddeistige foarm de makro "panyk!" kin allinnich brûkt wurde mei statyske tekenrige (panyk!(“...")) of mei ien ynterpolearre wearde "&str" by it ferfangen (panyk!("{}", a)), wat beheind wêze moat ta it ferfangen fan "{ }" sûnder opmaak spesifikaasjes en oare typen. Yn 'e takomst sil de tapasberens fan makro's yn konstante konteksten útwreide wurde, mar de stabilisearre mooglikheden binne al genôch om assertkontrôles út te fieren by it kompilaasjestadium: const _: () = assert!(std::mem::size_of::() == 64); const _: () = assert!(std::mem::size_of::() == 8);
  • De Cargo-pakketbehearder lit it gebrûk meitsje fan profilen mei willekeurige nammen, net beheind ta "dev", "release", "test" en "bank". Bygelyks, om optimisaasje yn te skeakeljen op it keppelingsstadium (LTO) allinich as de definitive produktassemblies wurde oanmakke, kinne jo in "produksje" profyl yn Cargo.toml oanmeitsje en de flagge "lto = true" taheakje. By it definiearjen fan jo eigen profilen moatte jo lykwols in besteand profyl opjaan om de standertynstellingen derfan te erven. It foarbyld hjirûnder makket in "produksje" profyl dat it "release" profyl oanfolje troch de flagge "lto = true" op te nimmen. It profyl sels wurdt aktivearre troch lading te roppen mei de opsje "--profylproduksje", en de gearstallingsartefakten wurde pleatst yn 'e map "doel / produksje". [profile.production] inherits = "release" lto = wier
  • It gebrûk fan try_reserve foar de typen Vec, String, HashMap, HashSet en VecDeque is stabilisearre, wêrtroch jo romte foarôf reservearje kinne foar in bepaald oantal eleminten fan in opjûn type om de frekwinsje fan operaasjes foar ûnthâldallokaasje te ferminderjen en te foarkommen crashes tidens operaasje troch gebrek oan ûnthâld.
  • It is tastien om makro's op te jaan mei krullende beugels yn útdrukkingen lykas "m!{ .. }.method()" en "m!{ .. }?".
  • De útfiering fan de triem :: read_to_end en read_to_string funksjes is optimalisearre.
  • Stipe foar de Unicode-spesifikaasje is bywurke nei ferzje 14.0.
  • It oantal funksjes markearre "#[must_use]" útwreide om in warskôging út te jaan as de weromkommende wearde wurdt negearre, wat helpt om flaters te identifisearjen feroarsake troch oan te nimmen dat in funksje wearden sil feroarje ynstee fan in nije wearde werom te jaan.
  • Eksperimintele backend tafoege foar koadegeneraasje mei libgccjit.
  • In nij diel fan 'e API is ferpleatst nei de kategory stabile, ynklusyf de metoaden en ymplemintaasjes fan eigenskippen binne stabilisearre:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • kolleksjes :: TryReserveError
    • HashMap::try_reserve
    • HashSet :: try_reserve
    • String :: try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque :: try_reserve
    • VecDeque :: try_reserve_exact
    • Iterator :: map_while
    • iter :: MapWhile
    • proc_macro :: is_beskikber
    • Kommando::get_program
    • Kommando::get_args
    • Kommando::get_envs
    • Kommando::get_current_dir
    • CommandArgs
    • CommandEnvs
  • De "const" attribút, dat bepaalt oft it kin brûkt wurde yn elts kontekst ynstee fan konstanten, wurdt brûkt yn de funksje hint :: unreachable_unchecked.
  • It tredde nivo fan stipe is ymplementearre foar de armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi en armv7a-kmc- solid_asp3-eabihf platfoarms. It tredde nivo omfettet basisstipe, mar sûnder automatisearre testen, publisearjen fan offisjele builds, of kontrolearjen oft de koade boud wurde kin.

Boarne: opennet.ru

Add a comment