Eldono de la programlingvo Rust 2021 (1.56)

La eldono de la sistema programlingvo Rust 1.56, fondita de la projekto Mozilla, sed nun disvolvita sub la aŭspicioj de la sendependa neprofitcela organizaĵo Rust Foundation, estis publikigita. Krom la regula versio numero, la eldono ankaŭ nomiĝas Rust 2021 kaj markas stabiligon de ŝanĝoj proponitaj dum la lastaj tri jaroj. Rust 2021 ankaŭ servos kiel la bazo por pliigado de funkcieco dum la venontaj tri jaroj, simile al kiel la liberigo de Rust 2018 fariĝis la bazo por la evoluo de la lingvo en la pasintaj tri jaroj.

Por konservi kongruon, programistoj povas uzi "2015", "2018" kaj "2021" etikedojn en siaj programoj, permesante al programoj esti ligitaj al lingvoŝtataj tranĉaĵoj respondaj al la elektitaj eldonoj de Rust. Eldonoj estis lanĉitaj por apartigi nekongruajn ŝanĝojn kaj estas agorditaj en la metadatenoj de kargopakaĵoj tra la "eldono" kampo en la "[pakaĵo]" sekcio. Ekzemple, la eldono "2018" inkluzivas la funkciecon stabiligitan ekde la fino de 2018 kaj ankaŭ kovras ĉiujn pliajn ŝanĝojn, kiuj ne rompas kongruon. La eldono de 2021 aldone inkluzivas kunfunkciebleco-rompantajn funkciojn proponitajn en la nuna 1.56-eldono kaj aprobitaj por estonta efektivigo. Krom la lingvo mem, la redaktoroj ankaŭ konsideras la staton de la iloj kaj dokumentado.

Gravaj nekongruoj registritaj en Rust 2021:

  • Aparta Kapto en Fermoj - Fermoj nun povas kapti individuajn kamponomojn anstataŭ la tuta identigilo. Ekzemple, "|| hakilo + 1" nur kaptos "hakilon" anstataŭ "a".
  • La trajto de IntoIterator por tabeloj: array.into_iter() permesas al vi ripetadi super tabelelementoj per valoroj, prefere ol per referencoj.
  • Pretigo de “|” esprimoj estis ŝanĝita en makro_reguloj (Bulea AŬ) en ŝablonoj - La ":pat" specifilo en kongruoj nun respektas "A | B".
  • La administranto de ŝarĝpakaĵoj inkluzivas defaŭlte la duan version de la funkcio solvilo, kies subteno aperis en Rust 1.51.
  • La trajtoj TryFrom, TryInto kaj FromIterator estis aldonitaj al la preluda norma biblioteka modulo.
  • La makrooj panic!(..) kaj assert!(expr, ..) nun ĉiam uzas format_args!(..) por formati ĉenojn, simile al println!().
  • La esprimoj ident#, ident»..." kaj ident'...' estas rezervitaj en la lingvosintakso.
  • Movis avertojn pri bare_trait_objects kaj ellipsis_inclusive_range_patterns al eraroj.

Nova en Rust 1.56:

  • En Cargo.toml, en la sekcio "[pakaĵo]", la rust-versia kampo estis aldonita, per kiu vi povas determini la minimuman subtenatan version de Rust por la kesto-pakaĵo. Se la nuna versio ne kongruas kun la specifita parametro, Kargo ĉesos funkcii kun erarmesaĝo.
  • Kiam ŝablono kongruo uzante "binding @ ŝablono" esprimoj, subteno estas provizita por specifi pliajn ligojn (ekzemple, "lasu matricon @ Matrix { row_len, .. } = get_matrix ();").
  • Nova parto de la API estis movita al la kategorio de stalo, inkluzive de la metodoj kaj efektivigoj de trajtoj estis stabiligitaj:
    • 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
  • La atributo "const", kiu determinas la eblecon uzi en iu ajn kunteksto anstataŭ konstantoj, estas uzata en funkcioj
    • std::mem::transmute
    • [T]::unue
    • [T]::dividi_unue
    • [T]::lasta
    • [T]::split_last
  • La kompililo estis ŝanĝita por uzi LLVM-version 13.
  • Dua nivelo de subteno estis efektivigita por la platformo aarch64-apple-ios-sim kaj tria nivelo por la platformoj powerpc-unknown-freebsd kaj riscv32imc-esp-espidf. La tria nivelo implikas bazan subtenon, sed sen aŭtomatigita testado, publikigado de oficialaj konstruaĵoj aŭ kontrolado ĉu la kodo povas esti konstruita.

Memoru, ke Rust koncentriĝas pri memorsekureco, disponigas aŭtomatan memoradministradon, kaj disponigas rimedon por atingi altan paralelecon en laboro-ekzekuto sen uzado de rubokolektilo aŭ rultempo (rultempo estas reduktita al baza inicialigo kaj prizorgado de la norma biblioteko).

La aŭtomata memoradministrado de Rust eliminas erarojn dum manipulado de montriloj kaj protektas kontraŭ problemoj ekestiĝantaj de malalt-nivela memormanipulado, kiel ekzemple alirado de memorregiono post kiam ĝi estis liberigita, nulaj montriloj dereferences, bufrotranspasoj, ktp. Por distribui bibliotekojn, certigi kunigon kaj administri dependecojn, la projekto disvolvas la Cargo-pakaĵmanaĝeron. La deponejo crates.io estas subtenata por gastigado de bibliotekoj.

fonto: opennet.ru

Aldoni komenton