Lingua di prugrammazione Rust versione 1.61

A liberazione di a lingua di prugrammazione Rust 1.61 generale, fundata da u prughjettu Mozilla, ma avà sviluppata sottu à l'auspices di l'urganizazione indipendente Rust Foundation, hè stata publicata. A lingua si focalizeghja nantu à a sicurità di a memoria è furnisce i mezi per ottene un altu parallelismu di u travagliu evitendu l'usu di un cullizzioni di basura è runtime (u runtime hè ridutta à l'inizializazione basica è u mantenimentu di a biblioteca standard).

I metudi di gestione di a memoria di Rust salvanu u sviluppatore da l'errore quandu manipulanu i puntatori è prutegge da i prublemi chì si sviluppanu per via di a gestione di memoria di pocu livellu, cum'è l'accessu à una zona di memoria dopu chì hè stata liberata, dereferencing null pointers, buffer overruns, etc. Per distribuisce biblioteche, furnisce e custruzzioni è gestisce e dipendenze, u prughjettu sviluppa u gestore di pacchetti Cargo. U repository crates.io hè supportatu per l'ospitu di biblioteche.

A sicurezza di a memoria hè furnita in Rust à u tempu di compilazione attraversu a verificazione di riferimentu, u seguimentu di a pruprietà di l'ughjettu, a traccia di a vita di l'ughjettu (scopi), è a valutazione di a correttezza di l'accessu di memoria durante l'esekzione di codice. Rust furnisce ancu prutezzione contra i overflows integer, esige l'inizializazione obligatoria di i valori variabili prima di l'usu, gestisce l'errori megliu in a biblioteca standard, applica u cuncettu di referenze immutabili è variabili per difettu, offre una forte tipografia statica per minimizzà l'errori lògichi.

Innuvazioni principali:

  • Hè pussibule di definisce i vostri codici di ritornu da a funzione principale. Originariamente, a funzione principale di Rust puderia solu rinvià u tipu "()" (unità), chì sempre indicava un statutu di exit successu, salvu chì u sviluppatore hà chjamatu esplicitamente a funzione "process::exit(code)". In Rust 1.26, utilizendu u trattu di Terminazione inestable in a funzione principale, era pussibule di rinvià i valori "Ok" è "Err", chì currispondenu à i codici EXIT_SUCCESS è EXIT_FAILURE in i prugrammi C. In Rust 1.61, u trattu di Terminazione hè statu stabilitu, è un tipu di ExitCode separatu hè statu prupostu per rapprisintà un codice di ritornu specificu, chì astrae i tipi di ritornu specifichi di a piattaforma, furnisce i dui custanti predefiniti SUCCESS è FAILURE, è u metudu From. per rinvià un codice di ritornu persunalizatu. aduprà std::process::ExitCode; fn main() -> ExitCode { if !check_foo () { return ExitCode:: da (8); } ExitCode::SUCCESS }
  • E capacità supplementari di e funzioni definite cù l'espressione "const fn" sò stati stabilizati, chì ponu esse chjamati micca solu funzioni regularmente, ma ancu utilizati in ogni cuntestu invece di custanti. Queste funzioni sò calculate in tempu di compilazione, micca in runtime, cusì sò sottumessi à certe restrizioni, cum'è a capacità di leghje solu da custanti. In a nova versione, l'operazioni basi cù punters di funzione sò permessi in e funzioni const (creà, passà è casting pointers hè permessu, ma micca chjamà una funzione per puntatore); i limiti di trattu per i paràmetri generici di funzioni cust cum'è T: Copia; caratteristiche dinamicamente dispatchable (dyn Trait); impl Tipi di Trait per argumenti di funzione è valori di ritornu.
  • U flussu gestisce Stdin, Stdout è Stderr in std::io avà avà una vita statica ("'statica") quandu hè chjusu, chì permette custruzzioni cum'è "let out = std::io::stdout().lock();" cù ottene un manicu è mette un serratura in una espressione.
  • Una nova parte di l'API hè stata trasferita à a categuria di stabile, cumprese i metudi è l'implementazione di i tratti sò stati stabilizzati:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Scrivite per Cursor<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::processu::ExitCode
    • std::processu::Terminazione
    • std::thread::JoinHandle::is_finished
  • L'attributu "const", chì determina a pussibilità di usà in ogni cuntestu invece di custanti, hè utilizatu in e funzioni:
    • <*const T>::offset è <*mut T>::offset
    • <*const T>::wrapping_offset è <*mut T>::wrapping_offset
    • <*const T>::add è <*mut T>::add
    • <*const T>::sub è <*mut T>::sub
    • <*const T>::wrapping_add è <*mut T>::wrapping_add
    • <*const T>::wrapping_sub è <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Inoltre, pudete nutà l'articulu "Rust: A Critical Retrospective" cun un riassuntu di impressioni di a lingua Rust dopu avè scrittu 100 mila linee di codice in questu durante u sviluppu di u sistema operatore microkernel Xous utilizatu in firmware. I svantaghji includenu a sintassi difficiuli di capiscenu, l'incompletezza è u sviluppu cuntinuatu di a lingua, a mancanza di custruzzioni ripetibili, i prublemi tipici cù a fiducia di a dependenza in Crates.io, è a necessità di mantene una certa disciplina per scrive codice sicuru. E caratteristiche chì anu superatu l'aspettattivi includenu strumenti per a refactoring di u codice è a rielaborazione di "hacks" aghjuntu durante a prototipazione rapida.

Source: opennet.ru

Add a comment