Die algemene programmeertaal Rust 1.78, wat deur die Mozilla-projek gestig is, maar nou ontwikkel is onder die beskerming van die onafhanklike nie-winsgewende organisasie Rust Foundation, is vrygestel. Die taal fokus op geheueveiligheid en bied die middele om hoë werkparallelisme te bereik terwyl die gebruik van 'n vullisverwyderaar en looptyd vermy word (looptyd word verminder tot basiese inisialisering en instandhouding van die standaardbiblioteek).
Rust se geheue hantering metodes red die ontwikkelaar van foute wanneer wysers gemanipuleer word en beskerm teen probleme wat ontstaan as gevolg van laevlak geheue manipulasie, soos toegang tot 'n geheue area nadat dit vrygestel is, herkenning van nulwysers, buffer oorskryding, ens. Om biblioteke te versprei, bouwerk te verskaf en afhanklikhede te bestuur, ontwikkel die projek die Cargo-pakketbestuurder. Die crates.io-bewaarplek word ondersteun vir die aanbieding van biblioteke.
Geheueveiligheid word tydens samestellingstyd in Rust verskaf deur verwysingskontrolering, tred te hou met objekeienaarskap, tred te hou met objekleeftye (bestekke), en die korrektheid van geheuetoegang tydens kode-uitvoering te assesseer. Roes bied ook beskerming teen heelgetal oorvloei, vereis verpligte inisialisering van veranderlike waardes voor gebruik, hanteer foute beter in die standaard biblioteek, pas die konsep van onveranderlike verwysings en veranderlikes by verstek toe, bied sterk statiese tik om logiese foute te minimaliseer.
Belangrikste innovasies:
- 'n Nuwe kenmerknaamruimte "#[diagnosties]" is voorgestel, wat 'n manier bied om die foutboodskappe wat deur die samesteller geproduseer word, te beïnvloed. Die eerste in die nuwe spasie is die "#[diagnostic::on_unimplemented]"-kenmerk, wat gebruik kan word om die foutboodskappe aan te pas wat gegooi word in 'n situasie waar jy 'n eienskap moet gebruik wat nie vir die tipe geïmplementeer is nie. #[diagnostic::on_unimplemented( message = "My Boodskap vir `ImportantTrait<{A}>` is nie geïmplementeer vir `{Self}`", label = "My Label", note = "Nota 1", note = "Nota 2" )] eienskap ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } fout[E32]: My Boodskap vir `Belangrike eienskap ` is nie vir `String` geïmplementeer nie —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ My Etiket | | | vereis deur 'n binding wat deur hierdie oproep ingelei word | = hulp: die eienskap `BelangrikeEienskap ` is nie geïmplementeer vir `String` = nota: Nota 18 = nota: Nota 12
- Voorafbevestigingskontroles wat op onveilige funksies toegepas word, kan nou uitgestel word tot kodegenerering, sodat hierdie kontroles uitgevoer kan word sonder dat dit nodig is om die standaardbiblioteek in "#[cfg(debug_assertions)]"-modus te bou. Om kontrole te aktiveer, is dit nou voldoende om ontfoutstellings vir toets- of ontfoutbou van jou kode te aktiveer.
- Die gedrag van funksies in die standaardbiblioteek wat die belyning van wysers en skywe beïnvloed, is nou voorspelbaar tydens looptyd en hang af van die invoerdata. Die funksie pointer::align_offset, wat die offset bereken om die wyser in lyn te bring, gee nou usize::MAX slegs terug as die bewerking misluk. Die funksies slice::align_to en slice::align_to_mut beide, wat snye omskep in 'n voorstelling met 'n belynde middelste sny en die oorspronklike begin- en eindskywe, gee nou altyd die grootste middelste deel terug.
- Die volgende is na die stalkategorie oorgeplaas:
- impl Lees vir &Stdin
- Laat die gebruik van 'n nie-statiese (nie-statiese) leeftyd toe vir sommige std::error::Foutverwante implementerings.
- Impl implementering Groottewaarde word toegelaat.
- impl Van vir io :: Fout
- Die Barrier::new()-funksie is gestabiliseer om gebruik te word met die "const"-kenmerk in enige konteks in plaas van konstantes.
- Vir teikenplatforms x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm en i686-pc-gnull vereis nou ten minste Windows 10 weergawe.
- Die derde vlak van ondersteuning is geïmplementeer vir die wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf en loongarch64-unknown-linux-musl platforms. Die derde vlak behels basiese ondersteuning, maar sonder outomatiese toetsing, publikasie van amptelike bouwerk en verifikasie van kodeboubaarheid.
- Die tweede vlak van ondersteuning vir die teikenplatform Add wasm32-wasip1 is geïmplementeer. Die tweede vlak van ondersteuning behels 'n monteerwaarborg.
- Die platform wasm32-wasi-preview1-threads is hernoem na wasm32-wasip1-threads.
- Die samesteller is oorgeskakel om LLVM 18 te gebruik. Wanneer LLVM 18 vir x86-32- en x86-64-argitekture gebruik word, is die ABI wat met die u128- en i128-tipes geassosieer word, verander.
- In die Cargo pact-bestuurder is weergawe 4 van slotlêers (lockfile v4) gestabiliseer.
- Cargo het 'n gestabiliseerde globale kas met inligting oor die nuutste datagebruik. Die kas word gehuisves in $CARGO_HOME/.global-cache deur gebruik te maak van SQLite en word outomaties opgedateer om die jongste veranderinge aan die indeks, kratlêer, kodegids, git-kloon en git-afhandeling te weerspieël.
Daarbenewens probeer die Borgo-programmeertaal meer ekspressief as die Go-taal wees, maar minder kompleks as die Rust-taal. Borgo kombineer die beste kenmerke van Go and Rust, en maak op vir die tekortkominge van elke taal. Go is byvoorbeeld eenvoudig en reguit, maar bied nie gevorderde tipe veiligheidskenmerke nie. Die Rust-taal bied gereedskap vir veilige programmering, maar is te ingewikkeld. Die projek word ontwikkel deur Marco Sampellegrini, skrywer van The Simple Haskell Handbook en ontwikkelaar van die Quad CI deurlopende integrasiestelsel.

Borgo gebruik statiese tik, Go-agtige tipes, en Roes-agtige sintaksis. Puntkommae is opsioneel aan die einde van reëls in Borgo-kode. Borgo-kode word saamgestel in 'n Go-voorstelling wat ten volle versoenbaar is met bestaande Go-pakkette. Die samestellerkode is in Rust geskryf en word onder die ISC-lisensie versprei. gebruik fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response { title: string, duration: int, } fn main() { let res = Response { title: “Hello world”, duration: 0, } laat staat = NetworkState.Success(res) let msg = match state { NetworkState.Loading => “steeds laai”, NetworkState.Failed(code) => fmt.Sprintf(“Het foutkode: %d”, kode), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Bron: opennet.ru
