Rust 1.47 Programméiersprooch Fräisetzung

Verëffentlechung 1.47 vun der Rust System Programméierungssprooch, gegrënnt vum Mozilla Projet, gouf publizéiert. D'Sprooch konzentréiert sech op Erënnerung Sécherheet, stellt automatesch Erënnerung Gestioun, a stellt d'Mëttel fir eng héich Aufgab parallelism ze erreechen ouni e Gerempels Sammelstécker oder Runtime benotzen (Runtime ass reduzéiert op Basis initialization an Ënnerhalt vun der Standard Bibliothéik).

Dem Rust seng automatesch Erënnerungsmanagement eliminéiert Feeler beim Manipulatioun vun Pointer a schützt géint Probleemer déi aus Low-Level Memory Manipulatioun entstinn, sou wéi Zougang zu enger Erënnerungsregioun nodeems se befreit gouf, Null Pointer Dereferences, Puffer Iwwerstonnen, 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.

Haaptinnovatiounen:

  • Implementéiert Ënnerstëtzung fir Eegeschafte fir Arrays vun arbiträrer Gréisst. Virdrun, wéinst der Onméiglechkeet fir generesch Funktiounen fir all ganz Zuelerwäerter ze definéieren, huet d'Standardbibliothéik agebaute Charakterstützung nëmme fir Arrays bis zu 32 Elementer an der Gréisst geliwwert (d'Charakteristiken fir all Gréisst ware statesch definéiert). Dank der Schafung vu const generics Funktionalitéit gouf et méiglech generesch Funktiounen fir all Arraygréisst ze definéieren, awer si sinn nach net an de stabile Feature vun der Sprooch abegraff, obwuel se am Compiler implementéiert sinn an elo an der Standardbibliothéik benotzt ginn. fir Arraytypen vun all Gréisst.
    Zum Beispill wäert de folgende Konstrukt am Rust 1.47 den Inhalt vun enger Array drécken, obwuel et virdru zu engem Feeler gefouert hätt:

fn main() {
lass xs = [0; 34; an;
println!("{:?}", xs);
}

  • Versuergt Ausgang vu méi kuerze Spuren (Backtrace), Ausgang an Noutsituatiounen. Elementer, déi an de meeschte Situatiounen net interesséiert sinn, awer d'Ausgab zerstéieren an d'Opmierksamkeet vun de primäre Ursaachen vum Problem oflenken, sinn aus der Spuer ausgeschloss. Fir eng voll Spuer zréckzekommen, kënnt Dir d'Ëmfeldvariabel "RUST_BACKTRACE=voll" benotzen. Zum Beispill, fir de Code

fn main() {
Panik!();
}

Virdru gouf d'Spuer an 23 Etappen erausginn, awer elo gëtt et op 3 Etappen reduzéiert, wat Iech erlaabt Iech direkt d'Essenz ze verstoen:

thread 'main' panikéiert bei 'explizit Panik', src/main.rs:2:5
Stack backtrace:
0: std::panicking::begin_panic
bei /rustc/d…d75a/library/std/src/panicking.rs:497
1: Spillplaz :: Haaptsäit
op ./src/main.rs:2
2: Kär::ops::Funktioun::FnOnce::Call_once
bei /rustc/d…d75a/library/core/src/ops/function.rs:227

  • De Rustc Compiler gouf aktualiséiert fir mat LLVM 11 ze bauen (Rust benotzt LLVM als Backend fir Code Generatioun). Zur selwechter Zäit bleift d'Fähigkeit fir mam alen LLVM ze bauen, bis op d'Versioun 8, erhale bleiwen, awer par défaut (am Rust-lang/llvm-Projet) gëtt elo benotzt LLVM 11. D'Verëffentlechung vum LLVM 11 gëtt erwaart an der nächster Zäit. Deeg.
  • Op der Windows Plattform bitt de Rustc Compiler Ënnerstëtzung fir d'Kontrollfloss Integritéit Kontrollen z'erméiglechen (Control Flow Guard), aktivéiert mam Fändel "-C control-flow-guard". Op anere Plattformen gëtt dëse Fändel fir de Moment ignoréiert.
  • En neien Deel vun der API gouf an déi stabil Kategorie transferéiert, dorënner stabiliséiert Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TAU an f64::TAU.
  • Den Attribut "const", wat d'Méiglechkeet bestëmmt et an all Kontext ze benotzen anstatt Konstanten, gëtt an de Methoden benotzt:
    • nei fir all ganz Zuelen ausser null;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub an saturating_mul fir all ganz Zuelen;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace and is_ascii_types for char
  • Fir FreeBSD gëtt den Toolkit vu FreeBSD 11.4 benotzt (FreeBSD 10 ënnerstëtzt net LLVM 11).

Geholl opennet.ru

Source: linux.org.ru

Setzt e Commentaire