Lugha ya programu ya madhumuni ya jumla Rust 1.78, iliyoanzishwa na mradi wa Mozilla lakini sasa imeendelezwa chini ya ufadhili wa shirika huru lisilo la faida la Rust Foundation, imetolewa. Lugha inazingatia usimamizi salama wa kumbukumbu na hutoa njia za kufikia usawa wa juu wa kazi huku ikiepuka matumizi ya mtoaji wa takataka na wakati wa kukimbia (muda wa kukimbia umepunguzwa kuwa uanzishaji wa kimsingi na matengenezo ya maktaba ya kawaida).
Mbinu za utunzaji wa kumbukumbu za kutu huokoa msanidi programu kutokana na hitilafu wakati wa kuendesha viashiria na kulinda dhidi ya matatizo yanayotokea kutokana na utunzaji wa kumbukumbu wa kiwango cha chini, kama vile kufikia eneo la kumbukumbu baada ya kuachiliwa, kuondoa marejeleo ya viashiria visivyofaa, utiririshaji wa bafa, n.k. Ili kusambaza maktaba, kutoa miundo na kudhibiti utegemezi, mradi huunda msimamizi wa kifurushi cha Cargo. Hazina ya crates.io inatumika kwa kupangisha maktaba.
Usalama wa kumbukumbu hutolewa katika Rust wakati wa kukusanya kupitia kukagua marejeleo, kufuatilia umiliki wa kitu, kufuatilia muda wa maisha ya kitu (wigo), na kutathmini usahihi wa ufikiaji wa kumbukumbu wakati wa utekelezaji wa nambari. Kutu pia hutoa ulinzi dhidi ya mafuriko kamili, inahitaji uanzishaji wa lazima wa maadili tofauti kabla ya matumizi, hushughulikia makosa vyema katika maktaba ya kawaida, hutumia dhana ya marejeleo yasiyobadilika na vigeu kwa chaguo-msingi, hutoa uchapaji thabiti wa tuli ili kupunguza makosa ya kimantiki.
Ubunifu kuu:
- Nafasi mpya ya jina ya sifa "#[diagnostic]" imependekezwa, ikitoa njia ya kuathiri ujumbe wa makosa unaotolewa na mkusanyaji. Ya kwanza katika nafasi mpya ni sifa ya "#[diagnostic::on_unimplemented]", ambayo inaweza kutumika kubinafsisha ujumbe wa hitilafu unaotupwa katika hali ambapo unahitaji kutumia sifa ambayo haijatekelezwa kwa aina. #[diagnostic::on_unimplemented( message = "Ujumbe Wangu kwa `Sifa Muhimu<{A}>` hautekelezwi kwa `{Self}`", label = "My Lebel", note = "Dokezo 1", note = "Kumbuka 2" )] sifa MuhimuTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn kuu() { use_my_trait(String::new()); } kosa[E32]: Ujumbe Wangu kwa `ImportantTrait ` haijatekelezwa kwa `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^^ Lebo Yangu | | | inayohitajika na kikomo kilichoanzishwa na simu hii | = msaada: sifa `MuhimuSifa `haijatekelezwa kwa `String` = note: Note 18 = note: Note 12
- Ukaguzi wa madai ya awali unaotumika kwa vitendakazi visivyo salama sasa unaweza kuahirishwa hadi uundaji wa msimbo, ukiruhusu ukaguzi huu kufanywa bila hitaji la kuunda maktaba ya kawaida katika hali ya "#[cfg(debug_assertions)]". Ili kuanzisha ukaguzi, sasa inatosha kuwezesha madai ya utatuzi kwa majaribio au utatuzi wa miundo ya msimbo wako.
- Tabia ya utendakazi katika maktaba ya kawaida inayoathiri upangaji wa viashiria na vipande sasa inaweza kutabirika wakati wa utekelezaji na inategemea data ya ingizo. Kielekezi cha chaguo la kukokotoa::align_offset, ambacho hukokotoa urekebishaji ili kupanga kielekezi, sasa kinarejesha utumiaji::MAX ikiwa tu operesheni itafeli. Vipengele vya kukokotoa::align_to na slice::align_to_mut vyote viwili, ambavyo hubadilisha vipande kuwa kiwakilishi na kipande cha kati kilichopangiliwa na vipande vya mwanzo na mwisho, sasa kila mara hurudisha sehemu kubwa ya kati.
- Ifuatayo ilihamishiwa kwa kategoria thabiti:
- impl Soma kwa &Stdin
- Ruhusu matumizi ya maisha yasiyo tuli (yasiyo tuli) kwa baadhi ya std::error::Utekelezaji unaohusiana na hitilafu.
- Utekelezaji wa impl ?Thamani ya ukubwa inaruhusiwa.
- impl Kutoka kwa io::Hitilafu
- Kizuizi::new() chaguo za kukokotoa kimeimarishwa ili kutumika na sifa ya "const" katika muktadha wowote badala ya viunga.
- Kwa majukwaa lengwa ya x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm na i686-pc-windows-gnu sasa inahitaji angalau toleo la Windows 10.
- Kiwango cha tatu cha usaidizi kimetekelezwa kwa majukwaa ya wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf na loongarch64-haijulikani-linux-musl majukwaa. Kiwango cha tatu kinahusisha usaidizi wa kimsingi, lakini bila majaribio ya kiotomatiki, uchapishaji wa miundo rasmi, au kuangalia ikiwa msimbo unaweza kutengenezwa.
- Kiwango cha pili cha usaidizi kwa jukwaa lengwa la Ongeza wasm32-wasip1 kimetekelezwa. Ngazi ya pili ya usaidizi inahusisha dhamana ya mkutano.
- Mfumo wa wasm32-wasi-preview1-threads umebadilishwa jina na kuwa wasm32-wasip1-threads.
- Kikusanyaji kimebadilishwa ili kutumia LLVM 18. Unapotumia LLVM 18 kwa usanifu wa x86-32 na x86-64, ABI inayohusishwa na aina za u128 na i128 imebadilishwa.
- Katika kidhibiti cha mkataba wa Cargo, toleo la 4 la faili za kufuli (lockfile v4) limeimarishwa.
- Cargo ina akiba ya kimataifa iliyoimarishwa yenye taarifa kuhusu matumizi ya hivi punde ya data. Akiba inapangishwa katika akiba ya $CARGO_HOME/.global-cache kwa kutumia SQLite na inasasishwa kiotomatiki ili kuonyesha mabadiliko ya hivi punde kwenye faharasa, faili ya kreti, saraka ya msimbo, git clone na git checkout.
Zaidi ya hayo, lugha ya programu ya Borgo inajaribu kueleza zaidi kuliko lugha ya Go, lakini isiyo ngumu zaidi kuliko lugha ya Rust. Borgo inachanganya vipengele bora vya Go na Rust, ikitengeneza mapungufu ya kila lugha. Kwa mfano, Go ni rahisi na moja kwa moja, lakini haitoi vipengele vya hali ya juu vya usalama. Lugha ya kutu hutoa zana za upangaji salama, lakini ni ngumu zaidi. Mradi huu unatayarishwa na Marco Sampellegrini, mwandishi wa The Simple Haskell Handbook na msanidi wa mfumo wa ujumuishaji endelevu wa Quad CI.

Borgo hutumia uchapaji tuli, aina za Go-like, na sintaksia inayofanana na kutu. Nusu koloni ni hiari mwishoni mwa mistari katika msimbo wa Borgo. Msimbo wa Borgo umekusanywa kuwa kiwakilishi cha Go ambacho kinapatana kikamilifu na vifurushi vya Go vilivyopo. Nambari ya mkusanyaji imeandikwa kwa kutu na inasambazwa chini ya leseni ya ISC. tumia fmt enum NetworkState { Inapakia, Imeshindwa(int), Mafanikio(T), } Majibu ya muundo { title: string, duration: int, } fn main() { let res = Response { title: "Hello world", duration: 0, } let state = NetworkState.Success(res) let msg = match hali { NetworkState.Loading => “bado inapakia”, NetworkState.Failed(code) => fmt.Sprintf(“Nimepata msimbo wa hitilafu: %d”, msimbo), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Chanzo: opennet.ru
