Release fan de programmeartaal Rust 2021 (1.56)

De frijlitting fan de systeemprogrammearringstaal Rust 1.56, oprjochte troch it Mozilla-projekt, mar no ûntwikkele ûnder auspysjes fan de ûnôfhinklike non-profit organisaasje Rust Foundation, is publisearre. Njonken it reguliere ferzjenûmer wurdt de frijlitting ek Rust 2021 oanwiisd en markeart in stabilisaasje fan feroarings foarsteld yn 'e ôfrûne trije jier. Rust 2021 sil ek tsjinje as basis foar it fergrutsjen fan funksjonaliteit oer de kommende trije jier, fergelykber mei hoe't de frijlitting fan Rust 2018 de basis waard foar de ûntwikkeling fan 'e taal yn 'e ôfrûne trije jier.

Om kompatibiliteit te behâlden, kinne ûntwikkelders "2015", "2018" en "2021" labels yn har programma's brûke, wêrtroch't programma's kinne wurde keppele oan taalstatusplakken dy't oerienkomme mei de selekteare edysjes fan Rust. Edysjes waarden yntrodusearre om ynkompatibele feroarings te skieden en wurde konfigureare yn 'e metadata fan frachtpakketten fia it fjild "edysje" yn 'e seksje "[pakket]". Bygelyks, de "2018" edysje omfettet de funksjonaliteit stabilisearre as fan 'e ein fan 2018 en beslacht ek alle fierdere wizigingen dy't de kompatibiliteit net brekke. De 2021-edysje omfettet ek ynteroperabiliteitsbrekkende funksjes foarsteld yn 'e hjoeddeistige 1.56-release en goedkard foar takomstige ymplemintaasje. Njonken de taal sels hâldt de redaksje ek rekken mei de tastân fan de ark en dokumintaasje.

Wichtige ynkompatibiliteiten opnommen yn Rust 2021:

  • Separate Capture in Closures - Closures kinne no yndividuele fjildnammen fêstlizze ynstee fan de folsleine identifier. Bygelyks, "|| ax + 1" sil allinich "ax" fange ynstee fan "a".
  • De IntoIterator-eigenskip foar arrays: array.into_iter() lit jo oer array-eleminten iterearje troch wearden, ynstee fan ferwizings.
  • Ferwurking fan "|" útdrukkingen is feroare yn macro_rules (Boolean OR) yn patroanen - De ":pat" spesifisator yn wedstriden respektearret no "A | B".
  • De frachtpakketbehearder omfettet standert de twadde ferzje fan 'e funksje-resolver, wêrfoar stipe ferskynde yn Rust 1.51.
  • De TryFrom, TryInto en FromIterator trekken binne tafoege oan de prelude standert bibleteek module.
  • De panyk!(..) en assert!(expr, ..) makro's brûke no altyd format_args!(..) om strings te formatteren, fergelykber mei println!().
  • De útdrukkingen ident#, ident»..." en ident'...' binne reservearre yn de taalsyntaksis.
  • Ferpleatst bare_trait_objects en ellipsis_inclusive_range_patterns warskôgingen nei flaters.

Nij yn Rust 1.56:

  • Yn Cargo.toml, yn 'e seksje "[pakket]", is it rustferzjefjild tafoege, wêrmei jo de minimale stipe ferzje fan Rust foar it kratpakket kinne bepale. As de hjoeddeiske ferzje net oerienkomt mei de oantsjutte parameter, sil Cargo ophâlde mei wurkjen mei in flaterberjocht.
  • As patroan oerienkomt mei "binende @ patroan" útdrukkingen, wurdt stipe levere foar it opjaan fan ekstra binings (bygelyks "lit matrix @ Matrix { row_len, .. } = get_matrix();").
  • In nij diel fan 'e API is ferpleatst nei de kategory stabile, ynklusyf de metoaden en ymplemintaasjes fan eigenskippen binne stabilisearre:
    • std::os::unix::fs::chroot
    • UnsafeCell ::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf :: shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • It attribút "const", dat de mooglikheid bepaalt om yn elke kontekst te brûken ynstee fan konstanten, wurdt brûkt yn funksjes
    • std::mem::transmute
    • [T] :: earst
    • [T]::split_first
    • [T] :: lêste
    • [T]::split_last
  • De kompilator is oerskeakele om LLVM ferzje 13 te brûken.
  • In twadde nivo fan stipe is ymplementearre foar it aarch64-apple-ios-sim-platfoarm en in tredde nivo foar de powerpc-unknown-freebsd en riscv32imc-esp-espidf-platfoarms. It tredde nivo omfettet basisstipe, mar sûnder automatisearre testen, publisearjen fan offisjele builds, of kontrolearjen oft de koade boud wurde kin.

Unthâld dat Rust is rjochte op ûnthâld feilichheid, soarget foar automatyske ûnthâld behear, en jout in middel om te kommen ta hege parallelism yn wurk útfiering sûnder in gebrûk garbage samler 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.

Boarne: opennet.ru

Add a comment