Release av programmeringsspråket Rust 1.75 och unikernel Hermit 0.6.7

Utgivningen av Rust 1.75 allmänt programmeringsspråk, grundat av Mozilla-projektet, men nu utvecklat under överinseende av den oberoende ideella organisationen Rust Foundation, har publicerats. Språket fokuserar på minnessäkerhet och ger möjlighet att uppnå hög jobbparallellism samtidigt som man undviker användningen av en skräpsamlare och körtid (körtiden reduceras till grundläggande initiering och underhåll av standardbiblioteket).

Rusts minneshanteringsmetoder räddar utvecklaren från fel vid manipulering av pekare och skyddar mot problem som uppstår på grund av minneshantering på låg nivå, som att komma åt ett minnesområde efter att det har frigjorts, avläsning av nollpekare, buffertöverskridningar, etc. För att distribuera bibliotek, tillhandahålla builds och hantera beroenden utvecklar projektet Cargo package manager. Crates.io-förvaret stöds för värdbibliotek.

Minnessäkerhet tillhandahålls i Rust vid kompilering genom referenskontroll, hålla reda på objektägande, hålla reda på objektlivslängder (scopes) och bedöma riktigheten av minnesåtkomst under kodexekvering. Rust ger också skydd mot heltalsspill, kräver obligatorisk initiering av variabelvärden innan användning, hanterar fel bättre i standardbiblioteket, tillämpar konceptet med oföränderliga referenser och variabler som standard, erbjuder stark statisk typning för att minimera logiska fel.

Huvudsakliga innovationer:

  • Lade till möjligheten att använda "async fn" och "->impl Trait"-notationen i privata egenskaper. Till exempel, genom att använda "->impl Trait" kan du skriva en egenskapsmetod som returnerar en iterator: trait Container { fn items(&self) -> impl Iterator; } impl Container för MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Du kan också skapa egenskaper med "async fn": trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // kommer att utökas till: // fn fetch(&self, url: Url) -> impl Future; }

  • Lade till API för att beräkna byteoffset i förhållande till pekare. När du arbetar med nakna pekare ("*const T" och "*mut T") kan operationer krävas för att lägga till en offset till pekaren. Tidigare var det möjligt att använda en konstruktion som "::add(1)" för att lägga till antalet byte som motsvarar storleken på "size_of::()". Det nya API:et förenklar denna operation och gör det möjligt att manipulera byteoffset utan att först casta typerna till "*const u8" eller "*mut u8".
    • pointer::byte_add
    • pekare::byte_offset
    • pekare::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Fortsatt arbete för att öka prestanda för rustc-kompilatorn. Lade till BOLT-optimeraren, som körs i post-link-stadiet och använder information från en förberedd exekveringsprofil. Genom att använda BOLT kan du påskynda kompilatorexekveringen med cirka 2 % genom att ändra layouten på bibliotekskoden librustc_driver.so för mer effektiv användning av processorcachen.

    Inkluderade att bygga rustc-kompilatorn med alternativet "-Ccodegen-units=1" för att förbättra kvaliteten på optimering i LLVM. Testerna som utförs visar en ökning i prestanda i fallet med "-Ccodegen-units=1" build med cirka 1.5 %. De tillagda optimeringarna är endast aktiverade som standard för x86_64-unknown-linux-gnu-plattformen.

    De tidigare nämnda optimeringarna testades av Google för att minska byggtiden för Android-plattformskomponenter skrivna i Rust. Genom att använda "-C codegen-units=1" när vi byggde Android kunde vi minska storleken på verktygslådan med 5.5 % och öka dess prestanda med 1.8 %, medan byggtiden för själva verktygslådan nästan fördubblades.

    Aktivering av skräphämtning vid länktid ("--gc-sektioner") gav prestandaökningen upp till 1.9 %, möjliggör länktidsoptimering (LTO) upp till 7.7 % och profilbaserade optimeringar (PGO) upp till 19.8 %. I finalen tillämpades optimeringar med hjälp av verktyget BOLT, vilket gjorde det möjligt att öka bygghastigheten till 24.7 %, men storleken på verktygslådan ökade med 10.9 %.

    Release av programmeringsspråket Rust 1.75 och unikernel Hermit 0.6.7

  • En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
    • Atomic*::from_ptr
    • FileTimes
    • FileTimesExt
    • File::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Alternativ::as_slice
    • Alternativ::as_mut_slice
    • pointer::byte_add
    • pekare::byte_offset
    • pekare::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Attributet "const", som bestämmer möjligheten att använda det i alla sammanhang istället för konstanter, används i funktioner:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • Kanske Uninit::nollställd
    • mem::diskriminerande
    • mem::nollställd
  • Den tredje nivån av stöd har implementerats för plattformarna csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd och mipsel-unknown-netbsd. Den tredje nivån involverar grundläggande support, men utan automatiserad testning, publicering av officiella builds och verifiering av kodbyggbarhet.

Dessutom kan vi notera en ny version av Eremit-projektet, som utvecklar en specialiserad kärna (unikernel), skriven på språket Rust, som tillhandahåller verktyg för att bygga fristående applikationer som kan köras ovanpå en hypervisor eller ren hårdvara utan ytterligare lager och utan operativsystem. När den är byggd är applikationen statiskt länkad till ett bibliotek, som oberoende implementerar all nödvändig funktionalitet, utan att vara bunden till OS-kärnan och systembiblioteken. Projektkoden distribueras under Apache 2.0 och MIT-licenser. Assembly stöds för fristående exekvering av applikationer skrivna i Rust, Go, Fortran, C och C++. Projektet utvecklar också en egen bootloader som låter dig lansera Hermit med QEMU och KVM.

Källa: opennet.ru

Lägg en kommentar