On avaldatud Rust 1.74, mis on üldotstarbelise programmeerimiskeele uus versioon, algselt välja töötatud Mozilla projekti poolt, kuid nüüd arendatakse seda sõltumatu mittetulundusühingu Rust Foundation kaitse all. Keele fookus on mälu ohutu kasutamine ja see pakub vahendeid kõrge üheaegsete ülesannete täitmise saavutamiseks, samal ajal vältides prügikorjajat ja runtime'i (runtime piirdub põhi algseadistuse ja standardraamatukogu toetamisega).
Rustis olevad mäluhaldusmeetodid vabastavad arendajad probleemidest, mis on seotud osutitega, ning kaitsevad madala taseme mälutöötlusest tulenevate probleemide, nagu vabanenud mälu alale juurdepääs, nullosutite de-referentseerimine, mälupiiride ületamine jne. Raamatukogude levitamiseks, projekti koostamise ja sõltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude paigutamiseks toetatakse repo crates.io.
Rust tagab turvalise mälutöötluse kompilatsiooni ajal, kontrollides viiteid, jälgides objektide omandit, arvestades objektide elutsüklit (nähtavust) ja hinnates mälule juurdepääsu õigsust koodi käitamise ajal. Rust pakub ka meetmeid enamike täisarvude ületamiste vältimiseks, nõuab muutujate väärtuste algväärtustamist enne kasutamist, käsitleb vigasid paremini oma standardraamatukogus, rakendab immutamatuse (immutable) kontseptsiooni viidetes ja muutujates vaikimisi ning pakub tugevat staatilist tüüpimist loogiliste vigade minimeerimiseks.
Põhilised uuendused:
- Lisatud on lint-kontrollide seadistamise võimalus läbi Cargo.toml faili, mis sisaldab pakihalduri manifesti. Linti seadete, nagu reageerimise tase (forbid, deny, warn, allow), määramiseks on pakkuda uusi sektsioone „[lints]“ ja „[workspace.lints]“, mille muutmine arvestatakse uuesti kompileerimise otsuse tegemisel. Näiteks tulemisi arvestades pole enam vajalik üles ehitamisel flage „-F“, „-D“, „-W“ ja „-A“ määrata või koodis atribuutide „#![forbid(unsafe_code)]“ ja „#![deny(clippy::enum_glob_use)]“ lisamine, vaid nüüd saab kasutada manifestis Cargo: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "deny"
- Crate'i paketihalduri on lisatud autentimise võimalus repositooriumisse ühendamiseks. Põhivarustusse on lisatud tugi autentimisparameetrite salvestamiseks Linuxi (libsecret), macOS (Keychain) ja Windowsi (Windows Credential Manager) salvestustes, kuid süsteem on algselt loodud modulaarseks, võimaldades töötada erinevate pakkujate kogumise ja genereerimise tokenitega, näiteks on valmistatud pistikprogramm 1Passwordi paroolihalduri kasutamiseks. Autentimist võivad nõuda repositooriumid kõikide toimingute jaoks, mitte ainult pakettide avaldamise kinnitamiseks. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
- Stabiilsed on tagastatavate tüüpide projektsioonide tugi (impl_trait_projections), mis võimaldab mainida Self ja T::Assoc tagastatavates tüüpides, nagu «async fn» ja «-> impl Trait». struct Wrapper(&'a T); // Opaalsed tagastatavad tüübid, mis mainivad `Self`: impl Wrapper { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } trait Trait { type Assoc; fn new() -> Self::Assoc; } impl Trait for () { type Assoc = (); fn new() {} } // Opaalsed tagastatavad tüübid, mis mainivad seotud tüüpi: impl<'a, T: Trait> Wrapper { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
- Konstantse märgendiga `const`, mis määrab võimaluse kasutada konstandina igas kontekstis, on rakendatud funktsioonides:
- core::mem::transmute_copy
- str::is_ascii
- [u8]::is_ascii
- core::num::Saturating
- impl From for std::process::Stdio
- impl From for std::process::Stdio
- impl From for std::process::Child{Stdin, Stdout, Stderr}
- impl From for 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 for u16
- impl From for Vec
- impl From for Vec
- impl From for Arc
- impl From for Rc
- Komplektoris, tööriistades, standardteekides ja genereeritud rakenduste täitevfailides on Apple'i platvormide nõuded tõusnud: nüüd on tööks vajalikud vähemalt versioonid macOS 10.12 Sierra, iOS 10 ja tvOS 10, mis ilmusid 2016. aastal.
- Implementatsioon on neljanda toetuse taseme jaoks platvormil i686-pc-windows-gnullvm. Kolmas tase tähendab põhilist tuge, kuid ilma automatiseeritud testimise, ametlike kogude avaldamise ja koodi kogumise kontrollimiseta.
- Teise toetuse taseme rakendamine sihtplatvormil loongarch64-unknown-none. Teine toetuse tase tagab kokkupanemise.
Täiendavalt võib märkida kahte sündmust, mis on seotud Rusti keelega:
- OSTIF (Open Source Technology Improvement Fund), mis loodi avatud projektide turvalisuse suurendamise eesmärgil, avaldas RustVMM projekti auditi tulemused, mis pakub komponente, et luua spetsiifilisi hüperviisoreid ja monitore. virtuaalmasinad (VMM). Projekti arendamisega tegelevad sellised ettevõtted nagu Intel, Alibaba, Amazon, Google, Linaro ja Red Hat. RustVMM-i põhjal arendatakse Intel Cloud Hypervisori ja Dragonballi hüperviisaid. Audit kinnitas koodibaasi kõrget kvaliteeti ja arhitektuuri ning rakenduse tehnikaid, mis on suunatud maksimaalse turvalisuse saavutamisele. Auditi käigus tuvastati 6 probleemi, mis ei mõjuta turvalisust otseselt.
- Google esitles arendajate e-posti listis Linuxi tuumaparaadi uue versiooni Binderi protsessidevahelise suhtlemise mehhanismist, mis on ümber kirjutatud Rusti keeles. Ümber tegemine toimus projekti raames, mille eesmärk on suurendada turvalisust, edendada turvalise programmeerimise praktikaid ja parandada mäluhaldusprobleemide avastamisefektiivsust Androidis (umbes 70% Androidis tuvastatud kõikidest ohtlikest haavatavustest tuleneb mäluhaldusvigadest). Rustis rakendatud Binder saavutab funktsionaalsuse võrdse taseme algse C keeles versiooniga, läbib kõik AOSP (Android Open-Source Project) testid ja seda saab kasutada funktsionaalsete versioonide loomisel. Mõlema versiooni jõudlus jääb ligikaudu samale tasemele (kalded vahemikus -1,96% ja +1,38%).
Allikas: opennet.ru
