Rust 1.57 programspråk release

Utgivningen av systemprogrammeringsspråket Rust 1.57, grundat av Mozilla-projektet, men nu utvecklat i regi av den oberoende ideella organisationen Rust Foundation, har publicerats. Språket fokuserar på minnessäkerhet, ger automatisk minneshantering och ger möjlighet att uppnå hög uppgiftsparallellism 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.

Huvudsakliga innovationer:

  • Användningen av "panik!"-makrot har stabiliserats. i sammanhang som skapats under sammanställningen, till exempel "const fn"-deklarationer. Dessutom, förutom att använda "panik!" const-deklarationer tillåter användning av makrot "assert!". och några andra standardbiblioteks API:er. Stabilisering täcker ännu inte hela formateringsinfrastrukturen, så i sin nuvarande form är makrot "panik!" kan endast användas med statiska strängar (panic!(“...")) eller med ett enda interpolerat värde "&str" vid ersättning (panic!("{}", a)), vilket bör begränsas till att ersätta "{ }" utan formateringsspecifikationer och andra typer. I framtiden kommer tillämpligheten av makron i konstanta sammanhang att utökas, men de stabiliserade förmågorna är redan tillräckliga för att utföra påståendekontroller vid kompileringsstadiet: const _: () = hävda!(std::mem::size_of:: () == 64); const _: () = hävda!(std::mem::size_of:: () == 8);
  • Lastpakethanteraren tillåter användning av profiler med godtyckliga namn, inte begränsat till "dev", "release", "test" och "bänk". Till exempel, för att aktivera optimering i länkningsstadiet (LTO) endast när de slutliga produktsammansättningarna genereras, kan du skapa en "produktions"-profil i Cargo.toml och lägga till flaggan "lto = true" till den. Men när du definierar dina egna profiler måste du ange en befintlig profil för att ärva standardinställningarna från den. Exemplet nedan skapar en "produktions"-profil som kompletterar "release"-profilen genom att inkludera flaggan "lto = true". Själva profilen aktiveras genom att anropa last med alternativet "--profile production", och monteringsartefakterna kommer att placeras i "target/production"-katalogen. [profile.production] ärver = "släpp" lto = sant
  • Användningen av try_reserve för typerna Vec, String, HashMap, HashSet och VecDeque har stabiliserats, vilket gör att du kan reservera utrymme i förväg för ett visst antal element av en given typ för att minska frekvensen av minnesallokeringsoperationer och undvika kraschar under drift på grund av minnesbrist.
  • Det är tillåtet att ange makron med krulliga klammerparenteser i uttryck som "m!{ .. }.method()" och "m!{ .. }?".
  • Utförandet av funktionerna File::read_to_end och read_to_string har optimerats.
  • Stödet för Unicode-specifikationen har uppdaterats till version 14.0.
  • Utökade antalet funktioner märkta "#[must_use]" för att utfärda en varning om returvärdet ignoreras, vilket hjälper till att identifiera fel orsakade av att anta att en funktion kommer att ändra värden istället för att returnera ett nytt värde.
  • Lade till experimentell backend för kodgenerering med libgccjit.
  • En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • collections::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Kommando::get_program
    • Kommando::get_args
    • Kommando::get_envs
    • Kommando::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Attributet "const", som bestämmer om det kan användas i något sammanhang istället för konstanter, används i funktionstipset::unreachable_unchecked.
  • Den tredje nivån av stöd har implementerats för armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi och armv7a-kmic- solid_asp3-eabihf-plattformar. Den tredje nivån innebär grundläggande support, men utan automatiserad testning, publicering av officiella builds eller kontroll av om koden kan byggas.

Källa: opennet.ru

Lägg en kommentar