Lingua di prugrammazione Rust versione 1.64

A liberazione di a lingua di prugrammazione Rust 1.64 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:

  • I requisiti per l'ambiente Linux in u compilatore, u gestore di pacchetti Cargo è a libreria standard libstd sò stati aumentati - i requisiti minimi per Glibc sò stati elevati da a versione 2.11 à 2.17, è u kernel Linux da a versione 2.6.32 à 3.2. E restrizioni s'applicanu ancu à eseguibili di l'applicazione Rust custruiti cù libstd. I kit di distribuzione RHEL 7, SLES 12-SP5, Debian 8 è Ubuntu 14.04 rispondenu à i novi requisiti. U supportu per RHEL 6, SLES 11-SP4, Debian 7 è Ubuntu 12.04 serà discontinuatu. L'utilizatori chì utilizanu eseguibili Rust-built in ambienti cù un kernel Linux più anticu sò incuraghjiti à aghjurnà i so sistemi, stà in versioni più vechje di u compilatore, o mantene a so propria libstd fork cù strati per mantene a cumpatibilità.

    Trà i motivi per finisce u supportu per i sistemi Linux più vechji sò risorse limitate per cuntinuà à mantene a cumpatibilità cù ambienti più vechji. U supportu per a legacy Glibc richiede l'usu di strumenti legacy quandu si verifica in un sistema di integrazione cuntinuu, di fronte à l'aumentu di i requisiti di versione in LLVM è utilità di compilazione incruciata. L'aumentu di i requisiti di a versione di u kernel hè dovutu à a capacità di utilizà novi chjamati di u sistema in libstd senza a necessità di mantene e strati per assicurà a cumpatibilità cù i kernels più vechji.

  • U trattu IntoFuture hè statu stabilizatu, chì s'assumiglia à IntoIterator, ma difiere di l'ultimi utilizendu ".await" invece di "for ... in ..." loops. Quandu hè cumminatu cù IntoFuture, a chjave ".await" pò aspittà micca solu un trattu Future, ma ancu qualsiasi altri tipi chì ponu esse cunvertiti in un Futuru.
  • L'utilità di l'analizzatore di ruggine hè inclusa in a cullizzioni di utilità furnite cù e versioni di Rust. L'utilità hè ancu dispunibule per a stallazione cù rustup (component rustup add rust-analyzer).
  • U gestore di pacchetti Cargo include l'eredità di u spaziu di travagliu per eliminà a duplicazione di i valori di u campu cumuni trà i pacchetti, cum'è e versioni Rust è URL di repository. Hè aghjustatu ancu supportu per a custruzione di parechje piattaforme di destinazione à una volta (pudete avà specificà più di un paràmetru in l'opzione "--target").
  • Una nova parte di l'API hè stata trasferita à a categuria di stabile, cumprese i metudi è l'implementazione di i tratti sò stati stabilizzati:
    • future::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Tipi C-compatibili, stabilizzati prima in u modulu std::ffi, sò stati aghjuntu à u core è a libreria alloc:
    • core::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • I tipi C stabilizzati prima in u modulu std::os::raw sò stati aghjuntu à i moduli core::ffi è std::ffi (per esempiu, i tipi c_uint è c_ulong sò stati pruposti per i tipi C uint è ulong):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • I gestori di livellu bassu sò stati stabilizati per l'usu cù u mecanismu Poll (in u futuru hè previstu di furnisce una API simplificata chì ùn hà micca bisognu di l'usu di strutture di livellu bassu cum'è Pull and Pin):
    • futuru::poll_fn
    • compitu::pronti!
  • L'attributu "const", chì determina a pussibilità di usà in ogni cuntestu invece di custanti, hè utilizatu in a funzione slice::from_raw_parts.
  • Per almacenà e dati più compactamente, u layout di memoria di e strutture Ipv4Addr, Ipv6Addr, SocketAddrV4 è SocketAddrV6 hè stata cambiata. Ci pò esse un prublema di cumpatibilità cù pacchetti unichi di cassa chì utilizanu std::mem::transmute per a manipulazione di e strutture à livellu bassu.
  • A custruzione di u compilatore di ruggine per a piattaforma Windows usa l'ottimisazioni PGO (ottimisazione guidata da u prufilu), chì hà permessu di aumentà u rendiment di compilazione di codice da 10-20%.
  • U compilatore hà implementatu un novu avvisu nantu à i campi inutilizati in certe strutture.

Inoltre, pudete nutà u rapportu di statutu nantu à u sviluppu di una implementazione alternativa di u compilatore di lingua Rust, preparatu da u prughjettu gccrs (GCC Rust) è appruvatu per l'inclusione in u GCC. Dopu avè integratu u frontend, l'arnesi standard di GCC ponu esse aduprati per cumpilà i prugrammi in a lingua Rust senza a necessità di stallà u compilatore rustc, custruitu cù sviluppi LLVM. Sempre chì u sviluppu hè in traccia, è salvu ogni prublema imprevista, u frontend di Rust serà integratu in a versione GCC 13 prevista per maghju di l'annu prossimu. L'implementazione GCC 13 di Rust serà una versione beta, micca ancu attivata per difettu.

Source: opennet.ru

Add a comment