Izdaja programskega jezika Rust 1.61

Objavljena je bila izdaja splošnega programskega jezika Rust 1.61, ki ga je ustanovil projekt Mozilla, zdaj pa se razvija pod okriljem neodvisne neprofitne organizacije Rust Foundation. Jezik se osredotoča na varnost pomnilnika in zagotavlja sredstva za doseganje visoke paralelnosti opravil, hkrati pa se izogiba uporabi zbiralnika smeti in izvajalnega okolja (izvajalni čas je zmanjšan na osnovno inicializacijo in vzdrževanje standardne knjižnice).

Rustove metode ravnanja s pomnilnikom rešijo razvijalca pred napakami pri ravnanju s kazalci in ščitijo pred težavami, ki nastanejo zaradi ravnanja s pomnilnikom na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnih kazalcev, prekoračitev medpomnilnika itd. Za distribucijo knjižnic, zagotavljanje gradenj in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo. Repozitorij crates.io je podprt za gostovanje knjižnic.

Varnost pomnilnika je v Rustu zagotovljena v času prevajanja s preverjanjem sklicevanj, spremljanjem lastništva objekta, spremljanjem življenjskih dob objektov (obseg) in ocenjevanjem pravilnosti dostopa do pomnilnika med izvajanjem kode. Rust zagotavlja tudi zaščito pred celoštevilskimi prelivi, zahteva obvezno inicializacijo vrednosti spremenljivk pred uporabo, bolje obravnava napake v standardni knjižnici, privzeto uporablja koncept nespremenljivih referenc in spremenljivk, ponuja močno statično tipkanje za zmanjšanje logičnih napak.

Glavne novosti:

  • Možno je definirati lastne povratne kode iz glavne funkcije. Prvotno je Rustova glavna funkcija lahko vrnila samo vrsto "()" (enota), ki je vedno nakazovala uspešen izhodni status, razen če je razvijalec izrecno poklical funkcijo "process::exit(code)". V Rust 1.26 je bilo z uporabo lastnosti nestabilne prekinitve v glavni funkciji mogoče vrniti vrednosti »Ok« in »Err«, ki ustrezata kodama EXIT_SUCCESS in EXIT_FAILURE v programih C. V Rust 1.61 je bila značilnost Termination stabilna in predlagan je bil ločen tip ExitCode, ki predstavlja specifično povratno kodo, ki abstrahira tipe povratkov, specifične za platformo, tako da zagotavlja tako vnaprej določeni konstanti SUCCESS in FAILURE kot metodo From vrniti poljubno povratno kodo. uporabite std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } Izhodna koda::USPEH }
  • Stabilizirane so bile dodatne zmožnosti funkcij, definiranih z izrazom »const fn«, ki jih lahko imenujemo ne samo kot redne funkcije, ampak jih lahko uporabimo tudi v katerem koli kontekstu namesto konstant. Te funkcije se izračunajo v času prevajanja, ne med izvajanjem, zato zanje veljajo določene omejitve, na primer zmožnost branja samo iz konstant. V novi različici so osnovne operacije s kazalci funkcij dovoljene znotraj funkcij const (dovoljeno je ustvarjanje, posredovanje in prevajanje kazalcev, ne pa tudi klicanje funkcije s kazalcem); meje lastnosti za generične parametre funkcij const, kot je T: Copy; dinamično odpremljive lastnosti (dyn Trait); impl Vrste lastnosti za argumente funkcije in vrnjene vrednosti.
  • Tok obravnava Stdin, Stdout in Stderr v std::io ima zdaj statično življenjsko dobo (»static«), ko je zaklenjen, kar omogoča konstrukte, kot je »let out = std::io::stdout().lock();« s pridobivanjem ročaja in nastavitvijo ključavnice v enem izrazu.
  • Nov del API-ja je bil premaknjen v kategorijo stabilnega, vključno s stabiliziranimi metodami in implementacijami lastnosti:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Pišite za kazalec
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Prekinitev
    • std::thread::JoinHandle::is_finished
  • Atribut "const", ki določa možnost uporabe v katerem koli kontekstu namesto konstant, se uporablja v funkcijah:
    • ::offset in ::offset
    • ::wrapping_offset in ::wrapping_offset
    • ::add in ::add
    • ::sub in ::sub
    • ::wrapping_add in ::wrapping_add
    • ::wrapping_sub in ::wrapping_sub
    • ::as_mut_ptr
    • ::as_ptr_obseg
    • ::as_mut_ptr_range

Poleg tega si lahko ogledate članek »Rust: kritična retrospektiva« s povzetkom vtisov o jeziku Rust po tem, ko ste vanj napisali 100 tisoč vrstic kode med razvojem operacijskega sistema mikrojeder Xous, ki se uporablja v vdelani programski opremi. Slabosti vključujejo težko razumljivo sintakso, nepopolnost in nadaljnji razvoj jezika, pomanjkanje ponovljivih gradenj, tipične težave z zaupanjem odvisnosti v Crates.io in potrebo po vzdrževanju določene discipline za pisanje varne kode. Funkcije, ki so presegle pričakovanja, vključujejo orodja za preoblikovanje kode in predelavo »hekov«, dodanih med hitro izdelavo prototipov.

Vir: opennet.ru

Dodaj komentar