Rust 1.58 programspråk release

Utgivningen av det allmänna programmeringsspråket Rust 1.58, grundat av Mozilla-projektet, men nu utvecklat under överinseende 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:

  • I radformateringsblock, förutom den tidigare tillgängliga möjligheten att ersätta variabler som explicit listats efter en rad med nummer och namn, implementeras möjligheten att ersätta godtyckliga identifierare genom att lägga till uttrycket "{identifier}" till raden. Till exempel: // Tidigare stödda konstruktioner: println!("Hej, {}!", get_person()); println!("Hej, {0}!", get_person()); println!("Hej, {person}!", person = get_person()); // nu kan du ange let person = get_person(); println!("Hej, {person}!");

    Identifierare kan också anges direkt i formateringsalternativ. let (bredd, precision) = get_format(); för (namn, poäng) i get_scores() { println!("{name}: {score:width$.precision$}"); }

    Den nya ersättningen fungerar i alla makron som stöder definition av strängformat, med undantag för makrot "panik!". i 2015 och 2018 års versioner av Rust-språket, där panic!("{ident}") behandlas som en vanlig sträng (i Rust 2021 fungerar ersättningen).

  • Beteendet för std::process::Kommandostrukturen på Windows-plattformen har ändrats så att när kommandon körs, av säkerhetsskäl, letar den inte längre efter körbara filer i den aktuella katalogen. Den aktuella katalogen är utesluten eftersom den kan användas för att köra skadlig kod om program körs i opålitliga kataloger (CVE-2021-3013). Den nya körbara upptäcktslogiken innebär att man söker i Rust-katalogerna, programkatalogen, Windows-systemkatalogen och de kataloger som anges i miljövariabeln PATH.
  • Standardbiblioteket har utökat 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.
  • En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
    • Metadata::is_symlink
    • Sökväg::is_symlink
    • {integer}::saturating_div
    • Option::unwrap_unchecked
    • Resultat::unwrap_unchecked
    • Resultat::unwrap_err_unchecked
  • Attributet "const", som bestämmer möjligheten att använda det i alla sammanhang istället för konstanter, används i funktioner:
    • Duration::ny
    • Duration::checked_add
    • Duration::saturating_add
    • Duration::checked_sub
    • Duration::saturating_sub
    • Duration::checked_mul
    • Duration::saturating_mul
    • Duration::checked_div
  • Tillåten avledning av "*const T"-pekare i "const"-sammanhang.
  • I Cargo package manager har fältet rust_version lagts till i paketets metadata, och alternativet "--message-format" har lagts till i kommandot "cargo install".
  • Kompilatorn implementerar stöd för CFI-skyddsmekanismen (Control Flow Integrity), som lägger till kontroller före varje indirekt anrop för att upptäcka vissa former av odefinierat beteende som potentiellt kan leda till en överträdelse av den normala exekveringsordern (kontrollflödet) som ett resultat av användning av exploateringar som ändrar pekare lagrade i minnet på funktioner.
  • Kompilatorn har lagt till stöd för version 5 och 6 av LLVM-täckningsjämförelseformatet, som används för att utvärdera kodtäckning under testning.
  • I kompilatorn höjs kraven för minimiversionen av LLVM till LLVM 12.
  • Den tredje nivån av stöd för x86_64-unknown-none-plattformen har implementerats. Den tredje nivån innebär grundläggande support, men utan automatiserad testning, publicering av officiella builds eller kontroll av om koden kan byggas.

Dessutom kan vi notera publiceringen av Microsoft av releasen av Rust för Windows 0.30-bibliotek, som låter dig använda Rust-språket för att utveckla applikationer för Windows OS. Setet innehåller två lådapaket (windows och windows-sys), genom vilka du kan komma åt Win API i Rust-program. Kod för API-stöd genereras dynamiskt från metadata som beskriver API, vilket gör att du kan implementera stöd inte bara för befintliga Win API-anrop, utan för anrop som kommer att dyka upp i framtiden. Den nya versionen lägger till stöd för målplattformen UWP (Universal Windows Platform) och implementerar Handle- och Debug-typerna.

Källa: opennet.ru

Lägg en kommentar