Rust 1.61 programmeringsspråkutgivelse

Utgivelsen av Rust 1.61 generell programmeringsspråk, grunnlagt av Mozilla-prosjektet, men nå utviklet i regi av den uavhengige ideelle organisasjonen Rust Foundation, har blitt publisert. Språket fokuserer på minnesikkerhet og gir midler til å oppnå høy jobbparallellisme samtidig som man unngår bruk av en søppeloppsamler og kjøretid (kjøretiden reduseres til grunnleggende initialisering og vedlikehold av standardbiblioteket).

Rusts minnehåndteringsmetoder sparer utvikleren fra feil ved manipulering av pekere og beskytter mot problemer som oppstår på grunn av minnehåndtering på lavt nivå, for eksempel tilgang til et minneområde etter at det har blitt frigjort, avreferering av null-pekere, bufferoverskridelser, etc. For å distribuere biblioteker, tilby bygg og administrere avhengigheter, utvikler prosjektet Cargo-pakkeansvarlig. Crates.io-depotet støttes for hosting av biblioteker.

Minnesikkerhet er gitt i Rust på kompileringstidspunktet gjennom referansesjekking, holde styr på objekteierskap, holde styr på objektlevetider (scopes), og vurdere riktigheten av minnetilgang under kjøring av kode. Rust gir også beskyttelse mot heltallsoverløp, krever obligatorisk initialisering av variabelverdier før bruk, håndterer feil bedre i standardbiblioteket, bruker konseptet med uforanderlige referanser og variabler som standard, tilbyr sterk statisk skriving for å minimere logiske feil.

Hovedinnovasjoner:

  • Det er mulig å definere egne returkoder fra hovedfunksjonen. Opprinnelig kunne Rusts hovedfunksjon bare returnere typen "()" (enhet), som alltid indikerte en vellykket avslutningsstatus med mindre utvikleren eksplisitt kalte funksjonen "process::exit(code)". I Rust 1.26, ved å bruke den ustabile termineringsegenskapen i hovedfunksjonen, var det mulig å returnere verdiene "Ok" og "Err", tilsvarende EXIT_SUCCESS og EXIT_FAILURE-kodene i C-programmer. I Rust 1.61 er Termination-egenskapen gjort stabil, og en egen ExitCode-type er foreslått for å representere en spesifikk returkode, som abstraherer plattformspesifikke returtyper ved å gi både forhåndsdefinerte konstanter SUCCESS og FAILURE, og Fra-metoden for å returnere en vilkårlig returkode. bruk std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } ExitCode::SUKSESS }
  • Ytterligere funksjoner definert ved hjelp av uttrykket "const fn" har blitt stabilisert, som ikke bare kan kalles som vanlige funksjoner, men også brukes i enhver kontekst i stedet for konstanter. Disse funksjonene beregnes på kompileringstidspunktet, ikke ved kjøretid, så de er underlagt visse begrensninger, for eksempel muligheten til å lese kun fra konstanter. I den nye versjonen er grunnleggende operasjoner med funksjonspekere tillatt inne i const-funksjoner (opprette, sende og kaste pekere er tillatt, men ikke kalle en funksjon for peker); egenskapsgrenser for generiske parametere for const-funksjoner som T: Copy; dynamisk sendingsegenskaper (dyn Trait); impl Egenskapstyper for funksjonsargumenter og returverdier.
  • Strømmen håndterer Stdin, Stdout og Stderr i std::io har nå en statisk levetid ("statisk") når den er låst, og tillater konstruksjoner som "let out = std::io::stdout().lock();" med å få et håndtak og sette en lås i ett uttrykk.
  • En ny del av API har blitt flyttet til kategorien stabil, inkludert metodene og implementeringene av egenskaper er stabilisert:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Skriv for markør
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::prosess::Oppsigelse
    • std::thread::JoinHandle::er_ferdig
  • "const"-attributtet, som bestemmer muligheten for å bruke det i enhver kontekst i stedet for konstanter, brukes i funksjonene:
    • ::offset og ::offset
    • ::wrapping_offset og ::wrapping_offset
    • ::add og ::add
    • ::sub og ::sub
    • ::wrapping_add og ::wrapping_add
    • ::wrapping_sub og ::wrapping_sub
    • ::as_mut_ptr
    • ::as_ptr_range
    • ::as_mut_ptr_range

I tillegg kan du legge merke til artikkelen "Rust: A Critical Retrospective" med et sammendrag av inntrykk av Rust-språket etter å ha skrevet 100 tusen linjer med kode i den under utviklingen av Xous-mikrokjerneoperativsystemet brukt i fastvare. Ulemper inkluderer vanskelig å forstå syntaks, ufullstendighet og fortsatt utvikling av språket, mangel på repeterbare bygg, typiske problemer med avhengighetstillit i Crates.io, og behovet for å opprettholde en viss disiplin for å skrive sikker kode. Funksjoner som overgikk forventningene inkluderer verktøy for refaktorisering av kode og omarbeiding av "hacks" lagt til under rask prototyping.

Kilde: opennet.ru

Legg til en kommentar