PublicÄts vispÄrÄjas nozÄ«mes programmÄÅ”anas valodas Rust 1.78 izlaidums, kas dibinÄts ar Mozilla projektu, bet tagad izstrÄdÄts neatkarÄ«gÄs bezpeļÅas organizÄcijas Rust Foundation paspÄrnÄ. Valoda koncentrÄjas uz atmiÅas droŔību un nodroÅ”ina lÄ«dzekļus, lai sasniegtu augstu darba paralÄlismu, vienlaikus izvairoties no atkritumu savÄcÄja un izpildlaika izmantoÅ”anas (izpildlaiks tiek samazinÄts lÄ«dz standarta bibliotÄkas pamata inicializÄÅ”anai un uzturÄÅ”anai).
Rust atmiÅas apstrÄdes metodes pasargÄ izstrÄdÄtÄju no kļūdÄm, manipulÄjot ar rÄdÄ«tÄjiem, un aizsargÄ pret problÄmÄm, kas rodas zema lÄ«meÅa atmiÅas apstrÄdes dÄļ, piemÄram, piekļūŔana atmiÅas apgabalam pÄc tÄ atbrÄ«voÅ”anas, nulles rÄdÄ«tÄju atsauÄu atcelÅ”ana, bufera pÄrtÄriÅi utt. Lai izplatÄ«tu bibliotÄkas, nodroÅ”inÄtu bÅ«vÄjumus un pÄrvaldÄ«tu atkarÄ«bas, projekts izstrÄdÄ Cargo pakotÅu pÄrvaldnieku. Crates.io repozitorijs tiek atbalstÄ«ts bibliotÄku mitinÄÅ”anai.
AtmiÅas droŔība tiek nodroÅ”inÄta Rust kompilÄÅ”anas laikÄ, pÄrbaudot atsauces, sekojot lÄ«dzi objekta Ä«paÅ”umtiesÄ«bÄm, sekojot lÄ«dzi objektu kalpoÅ”anas laikam (tvÄrumam) un novÄrtÄjot atmiÅas piekļuves pareizÄ«bu koda izpildes laikÄ. RÅ«sa arÄ« nodroÅ”ina aizsardzÄ«bu pret veselu skaitļu pÄrpildīŔanu, pieprasa obligÄtu mainÄ«go vÄrtÄ«bu inicializÄciju pirms lietoÅ”anas, labÄk apstrÄdÄ kļūdas standarta bibliotÄkÄ, pÄc noklusÄjuma piemÄro nemainÄ«gu atsauÄu un mainÄ«go jÄdzienu, piedÄvÄ spÄcÄ«gu statisko rakstīŔanu, lai samazinÄtu loÄ£iskÄs kļūdas.
Galvenie jauninÄjumi:
- Ir ierosinÄta jauna atribÅ«ta nosaukumvieta "#[diagnostic]", kas nodroÅ”ina lÄ«dzekli, lai ietekmÄtu kompilatora radÄ«tos kļūdu ziÅojumus. Pirmais jaunajÄ telpÄ ir atribÅ«ts "#[diagnostic::on_unimplemented]", ko var izmantot, lai pielÄgotu kļūdu ziÅojumus, kas tiek izmesti situÄcijÄ, kad ir jÄizmanto pazÄ«me, kas nav ieviesta Å”im tipam. #[diagnostic::on_unimplemented( message = "Mans ziÅojums par `ImportantTrait<{A}>` nav ieviests `{Self}`", label = "Mana etiÄ·ete", note = "1. piezÄ«me", note = "PiezÄ«me 2" )] iezÄ«me ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } error[E32]: Mans ziÅojums par `ImportantTrait ` nav ieviests `String` ā> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | āāāā ^^^^^^^^^^^^^ Mana etiÄ·ete | | | prasa saite, kas ieviesta ar Å”o aicinÄjumu | = palÄ«dzÄ«ba: Ä«paŔība `SvarÄ«gaÄŖpaŔība ` nav ieviests virknei = piezÄ«me: 18. piezÄ«me = piezÄ«me: 12. piezÄ«me
- PÄrbaudes pirms apstiprinÄjuma, kas tiek piemÄrotas nedroÅ”Äm funkcijÄm, tagad var atlikt lÄ«dz koda Ä£enerÄÅ”anai, ļaujot veikt Ŕīs pÄrbaudes bez nepiecieÅ”amÄ«bas izveidot standarta bibliotÄku režīmÄ "#[cfg(debug_assertions)]". Lai aktivizÄtu pÄrbaudes, tagad ir pietiekami iespÄjot atkļūdoÅ”anas apgalvojumus jÅ«su koda testÄÅ”anas vai atkļūdoÅ”anas bÅ«vÄjumiem.
- Standarta bibliotÄkas funkciju darbÄ«ba, kas ietekmÄ rÄdÄ«tÄju un slÄÅu izlÄ«dzinÄÅ”anu, tagad ir paredzama izpildlaikÄ un ir atkarÄ«ga no ievades datiem. Funkcija pointer::align_offset, kas aprÄÄ·ina nobÄ«di rÄdÄ«tÄja lÄ«dzinÄÅ”anai, tagad atgriež use::MAX tikai tad, ja darbÄ«ba neizdodas. Funkcijas slice::align_to un slice::align_to_mut, kas pÄrveido ŔķÄles attÄlojumÄ ar izlÄ«dzinÄtu vidÄjo ŔķÄli un sÄkotnÄjÄm sÄkuma un beigu daļÄm, tagad vienmÄr atgriež lielÄko vidÄjo daļu.
- Uz stabilo kategoriju tika pÄrcelti:
- impl Lasīt &Stdin
- DažÄm std::error::error implementÄcijÄm atļaut izmantot nestatisku (nestatisku) kalpoÅ”anas laiku.
- Impl ievieÅ”ana ?IzmÄra vÄrtÄ«ba ir atļauta.
- impl No io::Error
- Funkcija Barrier::new() ir stabilizÄta, lai to varÄtu izmantot ar atribÅ«tu "const" jebkurÄ kontekstÄ, nevis konstantes.
- MÄrÄ·a platformÄm x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm un i686-gnullvm tagad ir nepiecieÅ”ama vismaz Windows 10 versija.
- TreÅ”ais atbalsta lÄ«menis ir ieviests platformÄm wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf un lolongarch64-unknown-linux-musl. TreÅ”ais lÄ«menis ietver pamata atbalstu, taÄu bez automatizÄtas testÄÅ”anas, oficiÄlu bÅ«vÄjumu publicÄÅ”anas vai pÄrbaudes, vai kodu var izveidot.
- Ir ieviests otrais atbalsta lÄ«menis mÄrÄ·a platformai Add wasm32-wasip1. Otrais atbalsta lÄ«menis ietver montÄžas garantiju.
- Platforma wasm32-wasi-preview1-threads ir pÄrdÄvÄta par wasm32-wasip1-threads.
- Kompilators ir pÄrslÄgts uz LLVM 18 izmantoÅ”anu. Izmantojot LLVM 18 x86-32 un x86-64 arhitektÅ«rÄm, ir mainÄ«ts ar u128 un i128 tipiem saistÄ«tais ABI.
- Kravas paktu pÄrvaldniekÄ ir stabilizÄta bloÄ·ÄÅ”anas failu 4. versija (lockfile v4).
- Cargo ir stabilizÄta globÄlÄ keÅ”atmiÅa ar informÄciju par jaunÄko datu lietojumu. KeÅ”atmiÅa tiek mitinÄta mapÄ $CARGO_HOME/.global-cache, izmantojot SQLite, un tiek automÄtiski atjauninÄta, lai atspoguļotu jaunÄkÄs izmaiÅas indeksÄ, kastes failÄ, koda direktorijÄ, git klonÄ un git checkout.
TurklÄt Borgo programmÄÅ”anas valoda cenÅ”as bÅ«t izteiksmÄ«gÄka nekÄ Go valoda, bet mazÄk sarežģīta nekÄ Rust valoda. Borgo apvieno Go un Rust labÄkÄs Ä«paŔības, kompensÄjot katras valodas trÅ«kumus. PiemÄram, Go ir vienkÄrÅ”s un saprotams, taÄu tas nenodroÅ”ina uzlabotas tipa droŔības funkcijas. Rust valoda nodroÅ”ina rÄ«kus droÅ”ai programmÄÅ”anai, taÄu tÄ ir pÄrÄk sarežģīta. Projektu izstrÄdÄ Marko Sampelgrini, rokasgrÄmatas The Simple Haskell autors un nepÄrtrauktÄs integrÄcijas sistÄmas Quad CI izstrÄdÄtÄjs.

Borgo izmanto statisko rakstīŔanu, Go lÄ«dzÄ«gus veidus un Rust lÄ«dzÄ«gu sintaksi. Semikoli nav obligÄti Borgo koda rindu beigÄs. Borgo kods ir apkopots Go attÄlojumÄ, kas ir pilnÄ«bÄ savietojams ar esoÅ”ajÄm Go pakotnÄm. Kompilatora kods ir rakstÄ«ts Rust un tiek izplatÄ«ts saskaÅÄ ar ISC licenci. izmantojiet fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response { virsraksts: virkne, ilgums: int, } fn main() { let res = Atbilde { virsraksts: "Sveika pasaule", ilgums: 0, } let state = NetworkState.Success(res) let msg = atbilst statusam { NetworkState.Loading => ājoprojÄm tiek ielÄdÄtsā, NetworkState.Failed(code) => fmt.Sprintf(āIegÅ«ts kļūdas kods: %dā, kods), NetworkState.Success (res) => res.title, } fmt.Println(msg)}
Avots: opennet.ru
