Paskelbtas „Mozilla“ projekto įkurtos, bet dabar globojamos nepriklausomos ne pelno organizacijos „Rust Foundation“ bendrosios paskirties programavimo kalbos „Rust 1.78“ leidimas. Kalba daugiausia dėmesio skiria atminties saugai ir suteikia galimybę pasiekti aukštą darbo lygiagretumą, vengiant šiukšlių rinktuvo ir vykdymo laiko (vykdymo laikas sumažinamas iki pagrindinės standartinės bibliotekos inicijavimo ir priežiūros).
„Rust“ atminties apdorojimo metodai apsaugo kūrėją nuo klaidų manipuliuojant rodyklėmis ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties tvarkymo, pvz., prieiga prie atminties srities ją atlaisvinus, nulinių rodyklių panaikinimas, buferio viršijimas ir kt. Siekiant platinti bibliotekas, teikti kūrimo ir valdyti priklausomybes, projektas sukuria krovinių paketų tvarkyklę. Crates.io saugykla palaikoma bibliotekų prieglobai.
Atminties sauga „Rust“ užtikrinama kompiliavimo metu, tikrinant nuorodas, stebint objekto nuosavybę, stebint objektų gyvavimo trukmę (apimtį) ir įvertinant prieigos prie atminties teisingumą vykdant kodą. Rust taip pat suteikia apsaugą nuo sveikųjų skaičių perpildymo, reikalauja, kad kintamieji būtų inicijuojami prieš naudojant, geriau tvarko klaidas standartinėje bibliotekoje, pagal numatytuosius nustatymus taiko nekintamų nuorodų ir kintamųjų koncepciją ir siūlo tvirtą statinį rašymą, kad būtų sumažintos loginės klaidos.
Pagrindinės naujovės:
- Buvo pasiūlyta nauja atributo vardų erdvė „#[diagnostic]“, suteikianti galimybę paveikti kompiliatoriaus generuojamus klaidų pranešimus. Pirmasis naujoje erdvėje yra atributas „#[diagnostic::on_unimplemented]“, kurį galima naudoti norint tinkinti klaidų pranešimus, pateikiamus situacijoje, kai reikia naudoti bruožą, kuris neįdiegtas šiam tipui. #[diagnostic::on_unimplemented( message = "Mano pranešimas, skirtas `ImportantTrait<{A}>` neįdiegtas `{Self}`", label = "Mano etiketė", note = "1 pastaba", note = "Pastaba 2" )] bruožas ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_tribut(String::new()); } error[E32]: Mano pranešimas, skirtas svarbiam bruožui ` neįdiegtas `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Mano etiketė | | | reikalaujama pagal šį kvietimą įvestą ribą | = Pagalba: bruožas `SvarbusBuožas „Eilutė“ neįdiegta = pastaba: 18 pastaba = pastaba: 12 pastaba
- Nesaugioms funkcijoms taikomus patikrinimus prieš patvirtinimą dabar galima atidėti iki kodo generavimo, todėl šiuos patikrinimus galima atlikti nekuriant standartinės bibliotekos režimu „#[cfg(debug_assertions)]“. Norint suaktyvinti patikrinimus, dabar pakanka įjungti kodo bandomųjų arba derinimo versijų derinimo patvirtinimus.
- Standartinės bibliotekos funkcijų, turinčių įtakos rodyklių ir pjūvių lygiavimui, elgsena dabar yra nuspėjama vykdymo metu ir priklauso nuo įvesties duomenų. Funkcija pointer::align_offset, kuri apskaičiuoja poslinkį, kad sulygiuotų žymeklį, dabar grąžina use::MAX tik tuo atveju, jei operacija nepavyksta. Funkcijos slice::align_to ir slice::align_to_mut, kurios paverčia skilteles į reprezentaciją su išlygiuotu viduriniu pjūviu ir pradine pradžios ir pabaigos skilteles, dabar visada grąžina didžiausią vidurinę dalį.
- Į stabilią kategoriją buvo perkelti:
- impl Skaityti &Stdin
- Leisti naudoti nestatinį (nestatinį) gyvavimo laiką kai kuriems std::error:: su klaida susijusiems diegimams.
- Impl įgyvendinimas Leidžiama dydžio vertė.
- impl Nuo io::Error
- Funkcija Barrier::new() buvo stabilizuota, kad būtų galima naudoti su "const" atributu bet kuriame kontekste vietoj konstantų.
- Tikslinėms platformoms x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm ir i686-gnullvm dabar reikalinga bent Windows 10 versija.
- Trečiasis paramos lygis įdiegtas platformoms wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf ir loongarch64-unknown-linux-musl. Trečiasis lygis apima pagrindinį palaikymą, bet be automatinio testavimo, oficialių versijų paskelbimo ir kodo kūrimo tinkamumo tikrinimo.
- Įdiegtas antrasis tikslinės platformos Add wasm32-wasip1 palaikymo lygis. Antrasis paramos lygis apima surinkimo garantiją.
- Platforma wasm32-wasi-preview1-threads buvo pervadinta į wasm32-wasip1-threads.
- Kompiliatorius buvo perjungtas į LLVM 18. Naudojant LLVM 18 x86-32 ir x86-64 architektūroms, buvo pakeistas ABI, susietas su u128 ir i128 tipais.
- Krovinių pakto tvarkyklėje buvo stabilizuota 4 užrakto failų versija (lockfile v4).
- „Cargo“ turi stabilizuotą visuotinę talpyklą su informacija apie naujausią duomenų naudojimą. Talpykla talpinama $CARGO_HOME/.global-cache naudojant SQLite ir automatiškai atnaujinama, kad atspindėtų naujausius indekso, dėžės failo, kodo katalogo, git klono ir git patikros pakeitimus.
Be to, Borgo programavimo kalba bando būti išraiškingesnė nei Go kalba, bet mažiau sudėtinga nei Rust kalba. „Borgo“ sujungia geriausias „Go“ ir „Rust“ savybes, kompensuodamas kiekvienos kalbos trūkumus. Pavyzdžiui, „Go“ yra paprastas ir nesudėtingas, tačiau jame nėra pažangių saugos funkcijų. Rust kalba suteikia saugaus programavimo įrankius, tačiau yra pernelyg sudėtinga. Projektą kuria Marco Sampellegrini, The Simple Haskell Handbook autorius ir Quad CI nuolatinės integracijos sistemos kūrėjas.

„Borgo“ naudoja statinį rašymą, „Go“ tipo tipus ir „Rust“ tipo sintaksę. Kabliataškiai yra neprivalomi Borgo kodo eilučių pabaigoje. Borgo kodas yra sudarytas į Go reprezentaciją, kuri yra visiškai suderinama su esamais Go paketais. Kompiliatoriaus kodas parašytas Rust ir platinamas pagal ISC licenciją. naudokite fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Atsakymas { pavadinimas: eilutė, trukmė: int, } fn main() { let res = Atsakymas { pavadinimas: "Labas pasauli", trukmė: 0, } tegul būsite = NetworkState.Success(res) tegul msg = atitinka būseną { NetworkState.Loading => "vis dar įkeliama", NetworkState.Failed(kodas) => fmt.Sprintf("Gavo klaidos kodą: %d", kodas), NetworkState.Success (res) => res.title, } fmt.Println(msg)}
Šaltinis: opennet.ru
