Rust 1.61 programmeringssprog udgivelse

Det generelle programmeringssprog Rust 1.61, grundlagt af Mozilla-projektet, men nu udviklet i regi af den uafhængige non-profit organisation Rust Foundation, er blevet frigivet. Sproget fokuserer på hukommelsessikkerhed og giver midlerne til at opnå høj jobparallelisme, samtidig med at man undgår brugen af ​​en skraldeopsamler og runtime (runtime reduceres til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).

Rusts hukommelseshåndteringsmetoder sparer udvikleren for fejl ved manipulation af pointere og beskytter mod problemer, der opstår på grund af hukommelseshåndtering på lavt niveau, såsom adgang til et hukommelsesområde efter det er blevet frigivet, dereferencing af nul-pointere, bufferoverskridelser osv. For at distribuere biblioteker, levere builds og administrere afhængigheder udvikler projektet Cargo Package Manager. Crates.io-lageret understøttes til hosting af biblioteker.

Hukommelsessikkerhed er tilvejebragt i Rust på kompileringstidspunktet gennem referencekontrol, holde styr på objektejerskab, holde styr på objektlevetider (scopes) og vurdere rigtigheden af ​​hukommelsesadgang under kodeudførelse. Rust giver også beskyttelse mod heltalsoverløb, kræver obligatorisk initialisering af variabelværdier før brug, håndterer fejl bedre i standardbiblioteket, anvender konceptet med uforanderlige referencer og variabler som standard, tilbyder stærk statisk skrivning for at minimere logiske fejl.

Vigtigste innovationer:

  • Det er muligt at definere dine egne returkoder fra hovedfunktionen. Oprindeligt kunne Rusts hovedfunktion kun returnere typen "()" (enhed), som altid indikerede en vellykket exit-status, medmindre udvikleren eksplicit kaldte "process::exit(code)"-funktionen. I Rust 1.26, ved at bruge det ustabile termineringstræk i hovedfunktionen, var det muligt at returnere værdierne "Ok" og "Err", svarende til EXIT_SUCCESS og EXIT_FAILURE-koderne i C-programmer. I Rust 1.61 er Termination-egenskaben gjort stabil, og en separat ExitCode-type er blevet foreslået til at repræsentere en specifik returkode, som abstraherer platformspecifikke returtyper ved at give både foruddefinerede konstanter SUCCESS og FAILURE, og From-metoden for at returnere en tilpasset returkode. brug std::proces::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } Udgangskode::SUCCES }
  • Yderligere funktioner for funktioner defineret ved hjælp af udtrykket "const fn" er blevet stabiliseret, som ikke kun kan kaldes som regulære funktioner, men også bruges i enhver sammenhæng i stedet for konstanter. Disse funktioner beregnes på kompileringstidspunktet, ikke ved runtime, så de er underlagt visse begrænsninger, såsom muligheden for kun at læse fra konstanter. I den nye version er grundlæggende handlinger med funktionsmarkører tilladt inde i const-funktioner (oprettelse, videregivelse og casting af pointere er tilladt, men ikke at kalde en funktion for pointer); egenskabsgrænser for generiske parametre for const-funktioner såsom T: Kopi; dynamiske træk (dyn-træk); impl Træktyper for funktionsargumenter og returværdier.
  • Streamen håndterer Stdin, Stdout og Stderr i std::io har nu en statisk levetid ("statisk"), når den er låst, hvilket giver mulighed for konstruktioner som "let out = std::io::stdout().lock();" med at få håndtag og sætte en lås i ét udtryk.
  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Skriv til markør<[u8; N]>
    • std::os::unix::net::SocketAddr::fra_stinavn
    • std::proces::ExitCode
    • std::proces::Opsigelse
    • std::tråd::JoinHandle::er_færdig
  • "const"-attributten, som bestemmer muligheden for at bruge den i enhver sammenhæng i stedet for konstanter, bruges i funktionerne:
    • <*const T>::offset og <*mut T>::offset
    • <*const T>::wrapping_offset og <*mut T>::wrapping_offset
    • <*const T>::add og <*mut T>::add
    • <*const T>::sub og <*mut T>::sub
    • <*const T>::wrapping_add og <*mut T>::wrapping_add
    • <*const T>::wrapping_sub og <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Derudover kan du bemærke artiklen "Rust: A Critical Retrospective" med en oversigt over indtryk af Rust-sproget efter at have skrevet 100 tusinde linjer kode i den under udviklingen af ​​Xous-mikrokerneoperativsystemet, der bruges i firmware. Ulemper omfatter vanskeligt at forstå syntaks, ufuldstændighed og fortsat udvikling af sproget, mangel på repeterbare builds, typiske problemer med afhængighedstillid til Crates.io og behovet for at opretholde en vis disciplin for at skrive sikker kode. Funktioner, der oversteg forventningerne, omfatter værktøjer til refaktorering af kode og omarbejdning af "hacks" tilføjet under hurtig prototyping.

Kilde: opennet.ru

Tilføj en kommentar