Verëffentlechung vun der Programméiersprooch Rust 2021 (1.56)

D'Verëffentlechung vun der Systemprogramméierungssprooch Rust 1.56, gegrënnt vum Mozilla-Projet, awer elo entwéckelt ënner der Regie vun der onofhängeger Asbl Rust Foundation, gouf publizéiert. Zousätzlech zu der regulärer Versiounsnummer gëtt d'Verëffentlechung och Rust 2021 bezeechent a markéiert eng Stabiliséierung vun Ännerungen, déi an de leschten dräi Joer proposéiert goufen. Rust 2021 wäert och als Basis déngen fir d'Funktionalitéit an den nächsten dräi Joer ze erhéijen, ähnlech wéi d'Verëffentlechung vu Rust 2018 d'Basis fir d'Entwécklung vun der Sprooch an de leschten dräi Joer gouf.

Fir d'Kompatibilitéit z'erhalen, kënnen d'Entwéckler "2015", "2018" an "2021" Etiketten an hire Programmer benotzen, sou datt Programmer verbonne kënne mat Sproochestaatsschnëtter entspriechend den ausgewielten Editioune vu Rust. Editioune goufen agefouert fir inkompatibel Ännerungen ze trennen a sinn an de Metadaten vu Frachtpäck duerch de Feld "Editioun" an der Rubrik "[Package]" konfiguréiert. Zum Beispill enthält d'Editioun "2018" d'Funktionalitéit stabiliséiert vum Enn vum 2018 an deckt och all weider Ännerungen déi d'Kompatibilitéit net briechen. D'2021 Editioun enthält zousätzlech Interoperabilitéit briechen Features, déi an der aktueller 1.56 Verëffentlechung proposéiert goufen a fir zukünfteg Ëmsetzung guttgeheescht ginn. Nieft der Sprooch selwer, huelen d'Redaktoren och den Zoustand vun den Tools an Dokumentatioun Rechnung.

Grouss Inkompatibilitéiten am Rust 2021 opgeholl:

  • Separat Capture in Closures - Closures kënnen elo individuell Feldnimm erfaassen amplaz vum ganzen Identifizéierer. Zum Beispill, "|| Axt + 1" erfaasst nëmmen "Axt" amplaz vun "a".
  • D'IntoIterator Trait fir Arrays: array.into_iter() erlaabt Iech iwwer Arrayelementer duerch Wäerter ze iteréieren, anstatt duerch Referenzen.
  • D'Veraarbechtung vun "|" Ausdréck gouf a macro_rules geännert (Boolesch ODER) a Mustere - D'":pat" Spezifizéierer a Matcher respektéiert elo "A | B".
  • De Cargo Package Manager enthält als Standard déi zweet Versioun vum Feature Resolver, Ënnerstëtzung fir deen am Rust 1.51 erschien ass.
  • D'TryFrom, TryInto an FromIterator Charaktere goufen an de Prelude Standard Bibliothéik Modul bäigefüügt.
  • D'Panik!(..) an d'assert!(expr, ..) Makroen benotzen elo ëmmer format_args!(..) fir Strings ze formatéieren, ähnlech wéi println!().
  • D'Ausdréck ident#, ident"..." an ident"..." sinn an der Sproochsyntax reservéiert.
  • Geplënnert bare_trait_objects an ellipsis_inclusive_range_patterns Warnungen op Feeler.

Nei am Rust 1.56:

  • An Cargo.toml, an der Rubrik "[Package]" ass de Rust-Versiounsfeld bäigefüügt, duerch deen Dir déi minimal ënnerstëtzt Versioun vu Rust fir de Crate Package bestëmmen. Wann déi aktuell Versioun entsprécht net dem spezifizéierte Parameter, wäert Cargo ophalen mat enger Fehlermeldung ze schaffen.
  • Wann d'Muster passen mat "bindende @ Muster" Ausdréck, gëtt Ënnerstëtzung fir zousätzlech Bindungen ze spezifizéieren (zum Beispill "loosst Matrix @ Matrix { row_len, .. } = get_matrix();").
  • En neien Deel vun der API gouf an d'Kategorie vum Stall geplënnert, dorënner d'Methoden an d'Implementatioune vun de Charaktere goufen stabiliséiert:
    • 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
  • De "const" Attribut, deen d'Méiglechkeet bestëmmt fir an all Kontext ze benotzen anstatt Konstanten, gëtt a Funktiounen benotzt
    • std::mem::transmute
    • [T]::first
    • [T]::split_first
    • [T] :: lescht
    • [T]::split_last
  • De Compiler gouf gewiesselt fir LLVM Versioun 13 ze benotzen.
  • En zweeten Niveau vun der Ënnerstëtzung gouf fir d'aarch64-apple-ios-sim Plattform implementéiert an en drëtten Niveau fir d'powerpc-unknown-freebsd a riscv32imc-esp-espidf Plattformen. Den drëtten Niveau beinhalt d'Basis Ënnerstëtzung, awer ouni automatiséiert Testen, offiziell Builds ze publizéieren oder ze kontrolléieren ob de Code ka gebaut ginn.

Erënneren, datt Rust op Erënnerung Sécherheet konzentréiert ass, stellt automatesch Erënnerung Gestioun, a gëtt e Mëttel fir eng erreechen héich parallelism an Aarbecht Ausféierung ouni Dreckstipp Sammelstécker oder Runtime benotzt (Runtime reduzéiert op Basis initialization an Ënnerhalt vun der Norm Bibliothéik).

D'automatesch Erënnerungsmanagement vum Rust eliminéiert Feeler beim Manipulatioun vun Pointer a schützt géint Probleemer déi aus der Manipulatioun vun der Gedächtnis op engem nidderegen Niveau entstinn, sou wéi Zougang zu enger Erënnerungsregioun nodeems se befreit gouf, Null Pointer-Dereferenzen, Pufferiwwerschlag, etc. Fir Bibliothéiken ze verdeelen, Assemblée ze garantéieren an Ofhängegkeeten ze managen, entwéckelt de Projet de Cargo Package Manager. De crates.io Repository gëtt ënnerstëtzt fir Bibliothéiken ze hosten.

Source: opennet.ru

Setzt e Commentaire