Avaldatud on üldotstarbelise programmeerimiskeele Rust 1.78 väljaanne, mille on algatanud Mozilla projekt, kuid mida arendab nüüd iseseisev mittetulundusühing Rust Foundation. Keel keskendub mälu turvalisele töötlemisele ning pakub vahendeid kõrge paralleelsuse saavutamiseks, kasutamata samal ajal prügikorjajat ja käitusaega (käitusaeg piirdub põhialustamise ja standardraamatukogu hooldamisega).
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:
- Pakutud on uus atribuutide nimiruum "#[diagnostic]", mis pakub võimalusi, et mõjutada kompilaatori poolt genereeritud veateateid. Esimene uus nimiruumis rakendatud atribuut on "#[diagnostic::on_unimplemented]", mida saab kasutada veateadete kohandamiseks olukordades, kus on vajalik kasutada tüübi jaoks, millele pole tüübikohta rakendatud. #[diagnostic::on_unimplemented( message = "My Message for `ImportantTrait` is not implemented for `{Self}`", label = "My Label", note = "Note 1", note = "Note 2" )] trait ImportantTrait {} fn use_my_trait(_: impl ImportantTrait) {} fn main() { use_my_trait(String::new()); } error[E0277]: My Message for `ImportantTrait` is not implemented for `String` -> src/main.rs:12:18 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ My Label | | | required by a bound introduced by this call | = help: the trait `ImportantTrait` is not implemented for `String` = note: Note 1 = note: Note 2
- Eelnevad assert-kontrollid, mis rakenduvad unsafe-funktsioonide puhul, võivad nüüd olla edasi lükatud koodigeneratsiooni staadiumisse, võimaldades neid kontrolle teostada ilma vajaduseta ehitada standardteeki '#[cfg(debug_assertions)]' režiimis. Nüüd piisab kontrollide aktiveerimiseks oma koodi testimise või silumise kogumiks lihtsalt silumisassertide sisselülitamisest.
- Standardteegis funktsioonide käitumine, mis mõjutavad pointeuride ja slice'ide joondamist, on nüüd täituriga ennustatav ning sõltub sisendandmetest. Funktsioon pointer::align_offset, mis arvutab pointeuride joondamise nihke, tagastab nüüd usize::MAX ainult juhul, kui operatsiooni teostamine ei ole võimalik. Funktsioonid slice::align_to ja slice::align_to_mut, mis muundavad slice'id joondatud keskmise slice'i esitlemiseks ja algsete alg- ja lõpplõikudega, tagastavad nüüd alati kõige suurema keskmise osa.
- Stabiilseteks on muudetud:
- impl Read for &Stdin
- Mõnedest rakendustest, mis on seotud std::error::Error, on lubatud kasutada mitte staatilisi (mitte ‘static) eluea kujundeid.
- Rakenduses impl on lubatud kasutada väärtust ?Sized.
- impl From for io::Error
- Barrier::new() funktsioon on stabiliseeritud selle kasutamiseks konstantses kontekstis igas olukorras.
- Sihtplatvormideks x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm ja i686-pc-windows-gnullvm on nüüd nõutav vähemalt Windows 10 versioon.
- Kolmanda taseme tugi on rakendatud platvormidele wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf ja loongarch64-unknown-linux-musl. Kolmas tase tähendab põhitoetust, kuid ilma automatiseeritud testimise, ametlike kogumiste avaldamise ja koodi kompileerimise kontrollita.
- Teise taseme tugi on rakendatud sihtplatvormile Add wasm32-wasip1. Teine tase garanteerib kompileerimise.
- Platvorm wasm32-wasi-preview1-threads on ümber nimetatud wasm32-wasip1-threads.
- Kompilaator on üle viidud LLVM 18 kasutamisele. LLVM 18 kasutamisel x86-32 ja x86-64 arhitektuurides on muudetud ABI, mis on seotud tüüpidega u128 ja i128.
- Paketihaldur Cargo on stabiliseerinud 4. versiooni lukustusfailidest (lockfile v4).
- Cargo's global cache is stabilized with information about the last data usage. The cache is stored in the file $CARGO_HOME/.global-cache using SQLite, updated automatically, and reflects the latest changes related to the index, crate file, code directory, git clone, and git checkout.
Additionally, the programming language Borgo can be noted, which aims to be more expressive than Go while being less complex than Rust. Borgo combines the best features of Go and Rust, filling in the shortcomings of each language. For instance, Go is simple and clear but does not provide advanced tools for type safety. Rust offers tools for safe programming but is overly complex. The project is developed by Marco Sampellegrini, author of "The Simple Haskell Handbook" and developer of the continuous integration system Quad CI.

Borgo kasutab staatilist tüpimist, sarnaseid nagu Go tüüpide ja Rusti süntaksiga. Punktide kasutamine koodiread lõpus Borgos ei ole kohustuslik. Borgo keeles kirjutatud kood kompileeritakse Go keeles esitusvormiks, mis on täielikult ühilduv olemasolevate Go pakettidega. Koodikomplekt on kirjutatud Rusti keeles ja levitatakse ISC litsentsi alusel. use fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response { title: string, duration: int, } fn main() { let res = Response { title: "Hello world", duration: 0, } let state = NetworkState.Success(res) let msg = match state { NetworkState.Loading => "still loading", NetworkState.Failed(code) => fmt.Sprintf("Got error code: %d", code), NetworkState.Success(res) => res.title, } fmt.Println(msg) }
Allikas: opennet.ru
