Rust 1.61 programspråk release

Utgivningen av Rust 1.61 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:

  • Det är möjligt att definiera egna returkoder från huvudfunktionen. Ursprungligen kunde Rusts huvudfunktion bara returnera typen "()" (enhet), vilket alltid indikerade en framgångsrik exitstatus om inte utvecklaren uttryckligen anropade funktionen "process::exit(code)". I Rust 1.26, med hjälp av den instabila termineringsegenskapen i huvudfunktionen, var det möjligt att returnera värdena "Ok" och "Err", motsvarande EXIT_SUCCESS och EXIT_FAILURE-koderna i C-program. I Rust 1.61 har Termination-egenskapen gjorts stabil, och en separat ExitCode-typ har föreslagits för att representera en specifik returkod, som abstraherar plattformsspecifika returtyper genom att tillhandahålla både fördefinierade konstanter SUCCESS och FAILURE, och From-metoden för att returnera en anpassad returkod. använd std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } ExitCode::SUCCESS }
  • Ytterligare funktioner för funktioner som definieras med uttrycket "const fn" har stabiliserats, som inte bara kan kallas som vanliga funktioner, utan också användas i alla sammanhang istället för konstanter. Dessa funktioner beräknas vid kompilering, inte vid körning, så de är föremål för vissa begränsningar, såsom möjligheten att endast läsa från konstanter. I den nya versionen är grundläggande operationer med funktionspekare tillåtna i const-funktioner (skapa, skicka och casta pekare är tillåtet, men inte anropa en funktion för pekare); egenskapsgränser för generiska parametrar för konstfunktioner såsom T: Kopiera; dynamiskt sändbara egenskaper (dyn Trait); impl Egenskapstyper för funktionsargument och returvärden.
  • Strömmen hanterar Stdin, Stdout och Stderr i std::io har nu en statisk livslängd ("statisk") när den är låst, vilket tillåter konstruktioner som "let out = std::io::stdout().lock();" med att få ett handtag och sätta ett lås i ett uttryck.
  • En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Skriv för markör<[u8; N]>
    • std::os::unix::net::SocketAddr::från_sökväg
    • std::process::ExitCode
    • std::process::Uppsägning
    • std::tråd::JoinHandle::är_avslutad
  • Attributet "const", som bestämmer möjligheten att använda det i alla sammanhang istället för konstanter, används i funktioner:
    • <*const T>::offset och <*mut T>::offset
    • <*const T>::wrapping_offset och <*mut T>::wrapping_offset
    • <*const T>::add och <*mut T>::add
    • <*const T>::sub och <*mut T>::sub
    • <*const T>::wrapping_add och <*mut T>::wrapping_add
    • <*const T>::wrapping_sub och <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Dessutom kan du notera artikeln "Rust: A Critical Retrospective" med en sammanfattning av intryck av Rust-språket efter att ha skrivit 100 tusen rader kod i den under utvecklingen av Xous-mikrokärnoperativsystemet som används i firmware. Nackdelar inkluderar svårbegriplig syntax, ofullständighet och fortsatt utveckling av språket, brist på repeterbara byggen, typiska problem med beroendeförtroende i Crates.io och behovet av att upprätthålla en viss disciplin för att skriva säker kod. Funktioner som överträffade förväntningarna inkluderar verktyg för refaktorisering av kod och omarbetning av "hack" som lagts till under snabb prototypframställning.

Källa: opennet.ru

Lägg en kommentar