Rust 1.66 Rilaxx tal-Lingwa ta' Programmazzjoni

Ġiet rilaxxata l-lingwa ta 'programmar għal skopijiet ġenerali Rust 1.66, imwaqqfa mill-proġett Mozilla iżda issa żviluppat taħt l-awspiċi tal-organizzazzjoni indipendenti mingħajr skop ta' qligħ Rust Foundation. Il-lingwa tiffoka fuq is-sikurezza tal-memorja u tipprovdi l-mezzi biex tikseb paralleliżmu għoli tax-xogħol filwaqt li tevita l-użu ta 'ġbir ta' żibel u runtime (runtime huwa mnaqqas għal inizjalizzazzjoni bażika u manutenzjoni tal-librerija standard).

Il-metodi tal-immaniġġjar tal-memorja ta 'Rut isalvaw lill-iżviluppatur minn żbalji meta jimmanipula l-indikazzjonijiet u jipproteġu kontra problemi li jinqalgħu minħabba t-tqandil tal-memorja ta' livell baxx, bħall-aċċess għal żona tal-memorja wara li tkun ġiet meħlusa, dereferencing null pointers, buffer overruns, eċċ. Biex iqassam il-libreriji, jipprovdi bini u jimmaniġġja d-dipendenzi, il-proġett jiżviluppa l-maniġer tal-pakkett tat-Tagħbija. Ir-repożitorju crates.io huwa appoġġjat għall-hosting tal-libreriji.

Is-sikurezza tal-memorja hija pprovduta f'Rut fil-ħin tal-kompilazzjoni permezz ta 'verifika ta' referenza, iżżomm kont tal-pussess tal-oġġett, iżżomm kont tal-ħajja tal-oġġetti (ambiti), u tivvaluta l-korrettezza tal-aċċess għall-memorja waqt l-eżekuzzjoni tal-kodiċi. Rust jipprovdi wkoll protezzjoni kontra overflows integer, jeħtieġ inizjalizzazzjoni obbligatorja ta 'valuri varjabbli qabel l-użu, jimmaniġġja l-iżbalji aħjar fil-librerija standard, japplika l-kunċett ta' referenzi immutabbli u varjabbli b'mod awtomatiku, joffri tajpjar statiku qawwi biex jimminimizza l-iżbalji loġiċi.

Innovazzjonijiet ewlenin:

  • F'enumerazzjonijiet b'rappreżentazzjonijiet interi (l-attribut "#[repr(Int)]", hija permessa indikazzjoni espliċita tad-diskriminant (numru tal-varjant fl-enumerazzjoni), anke jekk l-enumerazzjoni fiha oqsma. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
  • Funzjoni miżjuda core::hint::black_box li sempliċement tirritorna l-valur riċevut. Peress li l-kompilatur jaħseb li din il-funzjoni qed tagħmel xi ħaġa, il-funzjoni black_box tista 'tintuża biex tiddiżattiva l-ottimizzazzjonijiet tal-kompilatur għal loops meta jwettaq l-ittestjar tal-prestazzjoni tal-kodiċi jew meta jeżamina l-kodiċi tal-magna ġġenerat (sabiex il-kompilatur ma jqisx il-kodiċi mhux użat u neħħih). Pereżempju, fl-eżempju hawn taħt, black_box(v.as_ptr()) jipprevjeni lill-kompilatur milli jaħseb li l-vector v mhux qed jintuża. uża std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); kaxxa_sewda(v.as_ptr()); } }
  • Il-maniġer tal-pakkett "tal-merkanzija" joffri l-kmand "neħħi", li jippermettilek tneħħi d-dipendenzi mill-manifest Cargo.toml mil-linja tal-kmand.
  • Porzjon ġdid tal-API ġie mċaqlaq għall-kategorija ta 'stabbli, inklużi l-metodi u l-implimentazzjonijiet tal-karatteristiċi ġew stabbilizzati:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{l-ewwel, l-aħħar, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Żid implimentazzjonijiet AsFd għal tipi stdio lock meta tuża WASI.
    • impl IpprovaFrom > għal Kaxxa<[T; N]>
    • core::hint::black_box
    • Duration::try_from_secs_{f32,f64}
    • Għażla::unzip
    • std::os::fd
  • Il-firxiet "..X" u "..=X" huma permessi f'mudelli.
  • Meta tinbena t-tarf ta 'quddiem tal-kompilatur rustc u l-backend LLVM, modi ta' ottimizzazzjoni LTO (Link Time Optimization) u BOLT (Binary Optimization and Layout Tool) jintużaw biex iżidu l-prestazzjoni tal-kodiċi li jirriżulta u jnaqqsu l-konsum tal-memorja.
  • Implimenta appoġġ tal-livell 5 għall-pjattaformi armv5te-none-eabi u thumbvXNUMXte-none-eabi. It-tielet livell jimplika appoġġ bażiku, iżda mingħajr ittestjar awtomatizzat, pubblikazzjoni ta 'bini uffiċjali u verifika tal-kapaċità li tinbena l-kodiċi.
  • Appoġġ miżjud għall-konnessjoni mal-Libreriji Ġeneriċi tal-macOS.

Barra minn hekk, nistgħu ninnotaw l-inklużjoni fil-kodiċi GCC tal-kompilatur front-end tal-lingwa Rust (gccrs). Il-frontend huwa inkluż fil-fergħa GCC 13, li se tiġi rilaxxata f'Mejju 2023. Nibda minn GCC 13, is-sett ta 'għodda standard tal-GCC se jkun jista' jintuża biex jikkompila programmi Rust mingħajr il-ħtieġa li jiġi installat il-kompilatur rustc mibni bl-użu ta 'żviluppi LLVM. L-implimentazzjoni Rust f'GCC 13 se tkun fi status beta, mhux attivata b'mod awtomatiku.

Sors: opennet.ru

Żid kumment