Gjuha e programimit për qëllime të përgjithshme Rust 1.78, e themeluar nga projekti Mozilla, por tani e zhvilluar nën kujdesin e organizatës së pavarur jofitimprurëse Rust Foundation, është publikuar. Gjuha fokusohet në sigurinë e kujtesës dhe siguron mjetet për të arritur paralelizëm të lartë të punës duke shmangur përdorimin e një grumbulluesi të mbeturinave dhe kohën e funksionimit (koha e funksionimit reduktohet në inicializimin bazë dhe mirëmbajtjen e bibliotekës standarde).
Metodat e trajtimit të memories Rust e ruajnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin për shkak të trajtimit të nivelit të ulët të kujtesës, të tilla si qasja në një zonë memorie pasi të jetë liruar, mosreferencimi i treguesve null, tejkalimet e buferit, etj. Për të shpërndarë bibliotekat, për të ofruar ndërtime dhe për të menaxhuar varësitë, projekti zhvillon menaxherin e paketave Cargo. Depoja e crates.io mbështetet për pritjen e bibliotekave.
Siguria e memories sigurohet në Rust në kohën e përpilimit përmes kontrollit të referencës, mbajtjes së gjurmës së pronësisë së objektit, mbajtjes së gjurmëve të jetëgjatësisë së objektit (scopes) dhe vlerësimit të saktësisë së aksesit në kujtesë gjatë ekzekutimit të kodit. Rust siguron gjithashtu mbrojtje kundër tejmbushjeve të numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave përpara përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pandryshueshme si parazgjedhje, ofron shtypje të fortë statike për të minimizuar gabimet logjike.
Risitë kryesore:
- Është propozuar një hapësirë e re e emrave të atributeve "#[diagnostic]", duke ofruar një mjet për të ndikuar në mesazhet e gabimit të prodhuara nga përpiluesi. E para në hapësirën e re është atributi "#[diagnostic::on_unimplemented]", i cili mund të përdoret për të personalizuar mesazhet e gabimit të hedhura në një situatë ku duhet të përdorni një tipar që nuk zbatohet për llojin. #[diagnostic::on_unimplemented( message = "Mesazhi im për `ImportantTrait<{A}>` nuk zbatohet për `{Vetë}`", label = "Etiketa ime", note = "Shënimi 1", shënim = "Shënim 2" )] tipar ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } gabim[E32]: Mesazhi im për `Trait i rëndësishëm ` nuk zbatohet për `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Etiketa ime | | | kërkohet nga një kufi i paraqitur nga kjo thirrje | = ndihmë: tipari `Trait i rëndësishëm ` nuk zbatohet për `String` = shënim: Shënim 18 = shënim: Shënim 12
- Kontrollet para-pohuese të aplikuara për funksionet e pasigurta tani mund të shtyhen deri në gjenerimin e kodit, duke lejuar që këto kontrolle të kryhen pa nevojën për të ndërtuar bibliotekën standarde në modalitetin "#[cfg(debug_asertions)]". Për të aktivizuar kontrollet, tani është e mjaftueshme të aktivizoni pohimet e korrigjimit për testimin ose ndërtimin e korrigjimit të kodit tuaj.
- Sjellja e funksioneve në bibliotekën standarde që ndikojnë në shtrirjen e treguesve dhe fetave tani është e parashikueshme në kohën e ekzekutimit dhe varet nga të dhënat hyrëse. Treguesi i funksionit::align_offset, i cili llogarit kompensimin për të rreshtuar treguesin, tani kthen usize::MAX vetëm nëse operacioni dështon. Funksionet slice::align_to dhe slice::align_to_mut të dyja, të cilat i transformojnë fetat në një paraqitje me një pjesë të mesit të rreshtuar dhe me feta fillestare dhe fundore origjinale, tani kthejnë gjithmonë pjesën më të madhe të mesme.
- Më poshtë u transferuan në kategorinë e qëndrueshme:
- impl Lexo për &Stdin
- Lejo përdorimin e një jetëgjatësie jostatike (jo statike) për disa zbatime std::error::Error.
- Impl zbatimi ?Vlera e madhësisë lejohet.
- impl Nga për io:: Gabim
- Funksioni Barrier::new() është stabilizuar për t'u përdorur me atributin "const" në çdo kontekst në vend të konstanteve.
- Për platformat e synuara x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm dhe i686-windows-p tani kërkon të paktën versionin e Windows 10.
- Niveli i tretë i mbështetjes është zbatuar për platformat wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf dhe loongarch64-unknown-linux-musl. Niveli i tretë përfshin mbështetje bazë, por pa testime të automatizuara, publikim të ndërtimeve zyrtare dhe verifikim të ndërtueshmërisë së kodit.
- Niveli i dytë i mbështetjes për platformën e synuar Add wasm32-wasip1 është zbatuar. Niveli i dytë i mbështetjes përfshin një garanci montimi.
- Platforma wasm32-wasi-preview1-threads është riemërtuar në wasm32-wasip1-threads.
- Përpiluesi është kaluar në përdorimin e LLVM 18. Kur përdoret LLVM 18 për arkitekturat x86-32 dhe x86-64, ABI e lidhur me llojet u128 dhe i128 është ndryshuar.
- Në menaxherin e paktit të ngarkesave, versioni 4 i skedarëve të kyçjes (lockfile v4) është stabilizuar.
- Cargo ka një memorie të stabilizuar globale me informacione rreth përdorimit më të fundit të të dhënave. Memoria e fshehtë strehohet në cache $CARGO_HOME/.global duke përdorur SQLite dhe përditësohet automatikisht për të pasqyruar ndryshimet më të fundit në indeksin, skedarin e arkës, drejtorinë e kodit, klonin git dhe git checkout.
Për më tepër, gjuha e programimit Borgo përpiqet të jetë më ekspresive se gjuha Go, por më pak komplekse se gjuha Rust. Borgo kombinon tiparet më të mira të Go dhe Rust, duke plotësuar mangësitë e secilës gjuhë. Për shembull, Go është e thjeshtë dhe e drejtpërdrejtë, por nuk ofron veçori të avancuara të sigurisë. Gjuha Rust ofron mjete për programim të sigurt, por është tepër e ndërlikuar. Projekti po zhvillohet nga Marco Sampellegrini, autor i Manualit të Simple Haskell dhe zhvillues i sistemit të integrimit të vazhdueshëm Quad CI.

Borgo përdor shtypjen statike, tipe të ngjashme me Go dhe sintaksë të ngjashme me Rust. Pikëpresje janë opsionale në fund të rreshtave në kodin Borgo. Kodi Borgo është përpiluar në një paraqitje Go që është plotësisht e pajtueshme me paketat ekzistuese Go. Kodi i përpiluesit është shkruar në Rust dhe shpërndahet nën licencën ISC. përdorni fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response { title: string, duration: int, } fn main() { let res = Response {titulli: “Hello world”, kohëzgjatja: 0, } let state = NetworkState.Success(res) le msg = përputhje gjendje { NetworkState.Loading => "ende po ngarkohet", NetworkState.Failed(kodi) => fmt.Sprintf("Kam kodin e gabimit: %d", kodi), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Burimi: opennet.ru
