ĂshtĂ« publikimi i versionit 1.74 tĂ« gjuhĂ«s sĂ« programimit Rust, e cila u zhvillua fillimisht nga Mozilla, tani nĂ«n mbikĂ«qyrjen e Fondacionit Rust, njĂ« organizatĂ« jo-fitimprurĂ«se. Gjuha Ă«shtĂ« fokusuar nĂ« sigurinĂ« e memorie dhe ofron mjete pĂ«r tĂ« arritur paralelizĂ«m tĂ« lartĂ« nĂ« ekzekutimin e detyrave, pa pĂ«rdorur mbledhĂ«sin e plehrave dhe runtime (runtime pĂ«rfshin vetĂ«m inicializimin bazĂ« dhe mbĂ«shtetje e bibliotekĂ«s standarde).
Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin nga puna me nivel të ulët me kujtesën, siç janë referimi në një zonë kujtese pas çlirimit të saj, dereferimi i treguesve null, tejkalimi i kufijve të tamponëve etj. Për shpërndarjen e biblioteka, për të siguruar ndërtimin dhe menaxhimin e varësive, projekti zhvillon menaxherin e paketave Cargo. Për ruajtjen e bibliotekave, mbështetet depoja crates.io.
Përdorimi i sigurt i memories sigurohet në Rust gjatë kompilimit përmes verifikimit të lidhjeve, gjurmimit të pronësisë së objekteve, përllogaritjes së kohëzgjatjes së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në memorie gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtje nga tejkalimet e numrave të plotë, kërkon inicializim të detyrueshëm të vlerave të variablave para përdorimit, menaxhon më mirë gabimet në bibliotekën standarde, aplikon konceptin e lidhjeve dhe variablave të pandryshueshëm (immutable) si parazgjedhje, dhe ofron tipizim të fortë statik për minimizimin e gabimeve logjike.
TĂ« rejat kryesore:
- Shtuar mundësia për konfigurimin e kontrollave lint përmes skedës Cargo.toml, e cila përmban manifestin e menaxherit të paketave. Për të përcaktuar konfigurimet lint, siç janë niveli i reagimit (forbid, deny, warn, allow), janë propozuar seksione të reja "[lints]" dhe "[workspace.lints]", ndryshimi i të cilave merret parasysh në vendimin për rindërtim. Për shembull, në vend të përcaktimit të flagjeve të ndërtimit "-F", "-D", "-W" dhe "-A" ose shtimit të atributeve "#![forbid(unsafe_code)]" dhe "#![deny(clippy::enum_glob_use)]" në kod, tani mund të përdoret në manifestin Cargo: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "deny"
- Menaxherit të paketave Crate i është shtuar mundësia e autentifikimit në lidhje me repositoriumin. Në paketën themelore është përfshirë mbështetje për vendosjen e parametrave të autentifikimit në magazinat e akteve Linux (baze libsecret), macOS (Keychain) dhe Windows (Windows Credential Manager), por sistemi është ndërtuar fillimisht të jetë modular dhe lejon organizimin e punës me ofrues të ndryshëm për ruajtjen dhe gjenerimin e tokeneve, për shembull, është përgatitur një plugin për përdorimin e menaxherit të fjalëkalimeve 1Password. Autentifikimi mund të kërkohet nga repositoriumi për çdo operacion, e jo vetëm për konfirmimin e publikimit të paketave. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
- MbĂ«shtetja e projekteve pĂ«r llojet e kthimit (impl_trait_projections) Ă«shtĂ« stabilizuar, duke lejuar pĂ«rmendjen e Self dhe T::Assoc nĂ« llojet e kthimit, tĂ« tilla si "async fn" dhe "-> impl Trait". struct Wrapper<âa, T>(&âa T); // Llojet e pamundura tĂ« kthimeve qĂ« pĂ«rmendin `Self`: impl Wrapper<â_, ()> { async fn async_fn() -> Self { /* ⊠*/ } fn impl_trait() -> impl Iterator { /* ⊠*/ } } trait Trait<âa> { type Assoc; fn new() -> Self::Assoc; } impl Trait<â_> pĂ«r () { type Assoc = (); fn new() {} } // Llojet e pamundura tĂ« kthimeve qĂ« pĂ«rmendin njĂ« lloj tĂ« lidhur: impl<âa, T: Trait<âa>> Wrapper<âa, T> { async fn mk_assoc() -> T::Assoc { /* ⊠*/ } fn a_few_assocs() -> impl Iterator<Item = T::Assoc> { /* ⊠*/ } }
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- Karakteristika «const», që përcakton mundësinë e përdorimit në çdo kontekst në vend të konstantave, është aplikuar në funksionet:
- core::mem::transmute_copy
- str::is_ascii
- [u8]::is_ascii
- core::num::Saturating
- impl From për std::process::Stdio
- impl From për std::process::Stdio
- impl From për std::process::Child{Stdin, Stdout, Stderr}
- impl From për std::process::Child{Stdin, Stdout, Stderr}
- std::ffi::OsString::from_encoded_bytes_unchecked
- std::ffi::OsString::into_encoded_bytes
- std::ffi::OsStr::from_encoded_bytes_unchecked
- std::ffi::OsStr::as_encoded_bytes
- std::io::Error::other
- impl TryFrom<char> për u16
- impl<T: Clone, const N: usize> From<&[T; N]> për Vec<T>
- impl<T: Clone, const N: usize> From<&mut [T; N]> për Vec<T>
- impl<T, const N: usize> From<[T; N]> për Arc<[T]>
- impl<T, const N: usize> From<[T; N]> për Rc<[T]>
- Në kompilator, veglat, bibliotekën standarde dhe skedarët ekzekutiv të aplikacioneve janë rritur kërkesat për platformat Apple: tani nevojiten të paktën versionet macOS 10.12 Sierra, iOS 10 dhe tvOS 10, të lansuara në vitin 2016.
- ĂshtĂ« zbatuar niveli i tretĂ« i mbĂ«shtetje pĂ«r platformĂ«n i686-pc-windows-gnullvm. Niveli i tretĂ« nĂ«nkupton mbĂ«shtetje tĂ« bazuar, por pa teste automatike, publikim tĂ« ndĂ«rtimeve zyrtare dhe verifikimin e mundĂ«sisĂ« pĂ«r ndĂ«rtimin e kodit.
- ĂshtĂ« zbatuar niveli i dytĂ« i mbĂ«shtetje pĂ«r platformĂ«n loongarch64-unknown-none. Niveli i dytĂ« i mbĂ«shtetjes nĂ«nkupton garantimin e ndĂ«rtimit.
Përveç kësaj, mund të përmenden dy ngjarje të lidhura me gjuhën Rust:
- Fondi OSTIF (Open Source Technology Improvement Fund), i themeluar me qëllim për të forcuar sigurinë e projekteve të hapura, publikoi rezultatet e auditi të projektit RustVMM, që ofron komponente për krijimin e hipervizorëve dhe monitorëve specifikë për detyra të caktuara. makinave virtuale (VMM). Në zhvillimin e projektit marrin pjesë kompani si Intel, Alibaba, Amazon, Google, Linaro dhe Red Hat. Nga RustVMM zhvillohen hipervizorët Intel Cloud Hypervisor dhe Dragonball. Auditi konfirmoi cilësinë e lartë të bazës së kodit dhe përdorimin në arkitekturë dhe implementim të teknikave të orientuara drejt arritjes së maksimaleve sigurisë. Gjatë auditi, u identifikuan 6 çështje që nuk kanë ndikim direkt mbi sigurinë.
- Kompania Google publikoi në listën e saj të shpërndarjes për zhvilluesit e bërthamës Linux një realizim të ri të mekanizmit për ndërveprimin midis proceseve Binder, të shkruar në gjuhën Rust. Ristrukturimi u realizua në kuadër të një projekti për të forcuar sigurinë, për të promovuar praktikat e programimit të sigurta dhe për të rritur efikasitetin e identifikimit të problemeve gjatë punës me memorien në Android (rreth 70% e të gjitha dobësive të rrezikshme të identifikuara në Android shkaktohen nga gabimet gjatë punës me memorien). Realizimi i Binder në Rust arriti paritet në funksionalitet me variantin e tij origjinal në gjuhën C, kalon të gjitha provat AOSP (Android Open-Source Project) dhe mund të përdoret për të krijuar redaksionet e punës të firmuerave. Performanca e të dy realizimeve është në një nivel të ngjashëm (shkallët nga -1.96% deri në +1.38%).
Burimi: opennet.ru
