Release av programmeringsspråket Rust 2021 (1.56)

Utgivningen av systemprogrammeringsspråket Rust 1.56, grundat av Mozilla-projektet, men nu utvecklat i regi av den oberoende ideella organisationen Rust Foundation, har publicerats. Utöver det vanliga versionsnumret benämns även utgåvan Rust 2021 och markerar en stabilisering av förändringar som föreslagits under de senaste tre åren. Rust 2021 kommer också att fungera som grund för att öka funktionaliteten under de kommande tre åren, i likhet med hur släppet av Rust 2018 blev grunden för utvecklingen av språket de senaste tre åren.

För att upprätthålla kompatibiliteten kan utvecklare använda "2015", "2018" och "2021" etiketter i sina program, vilket gör att program kan länkas till språktillståndssnitt som motsvarar de valda utgåvorna av Rust. Utgåvor introducerades för att separera inkompatibla ändringar och konfigureras i metadata för lastpaket genom fältet "utgåva" i avsnittet "[paket]". Till exempel inkluderar "2018"-utgåvan den funktionalitet som stabiliserats i slutet av 2018 och täcker även alla ytterligare ändringar som inte bryter mot kompatibiliteten. 2021-utgåvan innehåller dessutom interoperabilitetsbrytande funktioner som föreslås i den nuvarande 1.56-versionen och godkända för framtida implementering. Utöver själva språket tar redaktörerna även hänsyn till verktygens och dokumentationens tillstånd.

Stora inkompatibiliteter registrerade i Rust 2021:

  • Separat Capture in Closures - Closures kan nu fånga individuella fältnamn istället för hela identifieraren. Till exempel "|| axe + 1" kommer bara att fånga "ax" istället för "a".
  • IntoIterator-egenskapen för arrayer: array.into_iter() låter dig iterera över arrayelement med värden snarare än referenser.
  • Bearbetning av "|" uttryck har ändrats i macro_rules (Booleska ELLER) i mönster - ":pat"-specifikationen i matchningar respekterar nu "A | B".
  • Lastpakethanteraren inkluderar som standard den andra versionen av funktionsupplösaren, stöd för vilken dök upp i Rust 1.51.
  • TryFrom-, TryInto- och FromIterator-egenskaperna har lagts till i prelude-standardbiblioteksmodulen.
  • Makroen panic!(..) och assert!(expr, ..) använder nu alltid format_args!(..) för att formatera strängar, liknande println!().
  • Uttrycken ident#, ident..." och ident'...' är reserverade i språksyntaxen.
  • Flyttade bare_trait_objects och ellipsis_inclusive_range_patterns varningar till fel.

Nytt i Rust 1.56:

  • I Cargo.toml, i avsnittet "[paket]", har fältet rustversion lagts till, genom vilket du kan bestämma den minsta stödda versionen av Rust för lådapaketet. Om den aktuella versionen inte matchar den angivna parametern kommer Cargo att sluta fungera med ett felmeddelande.
  • När mönstermatchning använder "bindande @ mönster"-uttryck, tillhandahålls stöd för att specificera ytterligare bindningar (till exempel "låt matris @ Matrix { rad_len, .. } = get_matrix();").
  • En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
    • 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
  • Attributet "const", som bestämmer möjligheten att använda i alla sammanhang istället för konstanter, används i funktioner
    • std::mem::transmute
    • [T]::först
    • [T]::split_first
    • [T]::sista
    • [T]::split_last
  • Kompilatorn har bytts till att använda LLVM version 13.
  • En andra nivå av stöd har implementerats för plattformen aarch64-apple-ios-sim och en tredje nivå för plattformarna powerpc-unknown-freebsd och riscv32imc-esp-espidf. Den tredje nivån innebär grundläggande support, men utan automatiserad testning, publicering av officiella builds eller kontroll av om koden kan byggas.

Kom ihåg att Rust fokuserar på minnessäkerhet, tillhandahåller automatisk minneshantering och ger ett sätt att uppnå hög parallellitet i jobbutförande utan att använda en skräpsamlare eller körtid (körtiden reduceras till grundläggande initiering och underhåll av standardbiblioteket).

Rusts automatiska minneshantering eliminerar fel vid manipulering av pekare och skyddar mot problem som uppstår från minnesmanipulation på låg nivå, som att komma åt en minnesregion efter att den har frigjorts, nollpekarereferenser, buffertöverskridanden, etc. För att distribuera bibliotek, säkerställa montering och hantera beroenden utvecklar projektet Cargo package manager. Crates.io-förvaret stöds för värdbibliotek.

Källa: opennet.ru

Lägg en kommentar