U publikua versioni 1.78 i gjuhës së programimit Rust, e cila është krijuar nga projekti Mozilla, por tani zhvillohet nën mbikëqyrjen e organizatës jo-fitimprurëse Rust Foundation. Gjuha fokusohet në sigurinë e menaxhimit të memories dhe ofron mjete për të arritur një paralelizëm të lartë në ekzekutimin e detyrave, duke mos kërkuar përdorimin e mbledhësit të mbeturinave dhe runtime-it (runtime reduktohet në inicializimin themelor dhe mbështetje të biblioteka standarde).
Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit me treguesit dhe e mbrojnë atë nga problemet që lindin për shkak të punës me kujtesën në nivel të ulët, si qasja në një zonë kujtese pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers etj. Për shpërndarjen e bibliothekave, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me menaxherin e paketave Cargo. Për mbështetje të bibliothekave, ekziston një repository crates.io.
Puna e sigurt me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve, llogaritjes së kohëzgjatjes së jetës së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në kujtesë gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga tejkalimet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, aplikon konceptin e referencave dhe variablave të pandryshueshëm (immutable) si standard dhe ofron tipizimin e fortë statik për të minimizuar gabimet logjike.
Novitetet kryesore:
- ĂshtĂ« propozuar hapĂ«sira e re e emrave tĂ« atributeve "#[diagnostic]", duke ofruar mjete pĂ«r ndikimin mbi mesazhet e gabimeve tĂ« lĂ«shuara nga kompajleri. Atributi i parĂ« nĂ« kĂ«tĂ« hapĂ«sirĂ« tĂ« re Ă«shtĂ« "#[diagnostic::on_unimplemented]", i cili mund tĂ« pĂ«rdoret pĂ«r tĂ« konfiguruar mesazhet e gabimeve qĂ« lĂ«shohen nĂ« situatat kur Ă«shtĂ« kĂ«rkuar tĂ« pĂ«rdoret njĂ« tipar qĂ« nuk Ă«shtĂ« implementuar pĂ«r njĂ« lloj. #[diagnostic::on_unimplemented( message = "Mesazhi im pĂ«r `ImportantTrait<{A}>` nuk Ă«shtĂ« implementuar pĂ«r `{Self}`", label = "Etiketa ime", note = "ShĂ«nim 1", note = "ShĂ«nim 2" )] trait ImportantTrait<A> {} fn use_my_trait(_: impl ImportantTrait<i32>) {} fn main() { use_my_trait(String::new()); } gabim[E0277]: Mesazhi im pĂ«r `ImportantTrait<i32>` nuk Ă«shtĂ« implementuar pĂ«r `String` â> src/main.rs:12:18 | 12 | use_my_trait(String::new()); | ââââ ^^^^^^^^^^^^^ Etiketa ime | | | kĂ«rkohet nga njĂ« kufizim i prezantuar nga ky thirrje | = ndihmĂ«: tipi `ImportantTrait<i32>` nuk Ă«shtĂ« implementuar pĂ«r `String` = shĂ«nim: ShĂ«nim 1 = shĂ«nim: ShĂ«nim 2
- Kontrollimet paraprake assert që aplikohen në funksionet e pa sigurta tani mund të vonohen deri në fazën e gjenerimit të kodit, gjë që lejon kryerjen e këtyre verifikimeve pa pasur nevojë për kompilimin e bibliotekës standarde në modalitetin "#[cfg(debug_assertions)]". Për të aktivizuar kontrollimet, tani mjafton aktivizimi i assert-ëve të debugging për ndërtimet e testimit ose debugging të kodit tuaj.
- Kushtet e funksioneve në bibliotekën standarde që ndikojnë në përputhshmërinë e treguesve dhe segmenteve (slice), tani janë parashikueshmërisht gjatë ekzekutimit dhe varen nga të dhënat në hyrje. Funksioni pointer::align_offset, i cili llogarit offset-in për përputhshmërinë e treguesit, tani kthen usize::MAX vetëm kur operacioni nuk mund të ekzekutohet. Funksionet slice::align_to dhe slice::align_to_mut, të dyja, që konvertojnë segmentet në një përfaqësim me një segment të përputhshëm dhe me segmente fillestare dhe përfundimtare, tani gjithmonë kthejnë pjesën më të madhe të segmentit.
- Janë kaluar në rendin stabil:
- impl Read for &Stdin
- Lejohet pĂ«rdorimi i kohĂ«zgjatjes jo statike (jo âstatic) pĂ«r disa implementime qĂ« lidhen me std::error::Error.
- Në implementimin impl lejohet përdorimi i vlerës ?Sized.
- impl From për io::Error
- Funksioni Barrier::new() është stabilizuar për t'u përdorur me flagun «const» në çdo kontekst në vend të konstantave.
- Për platformat e targetuara 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-pc-windows-gnullvm tani kërkohet të paktën versioni Windows 10.
- Niveli i tretë i mbështetjes është realizuar për platformat wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf dhe loongarch64-unknown-linux-musl. Niveli i tretë nënkupton mbështetje bazë, por pa testim automatizuar, publikimin e ndërtimeve zyrtare dhe verifikimin e mundësisë për ndërtimin e kodit.
- Niveli i dytë i mbështetjes për platformën Add wasm32-wasip1 është realizuar. Niveli i dytë i mbështetjes nënkupton një garanci ndërtimi.
- Platforma wasm32-wasi-preview1-threads është riemëruar në wasm32-wasip1-threads.
- Kompilatori ë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 tipet u128 dhe i128 është ndryshuar.
- Në menaxherin e paketave Cargo është stabilizuar versioni 4 i skedarëve të bllokimit (lockfile v4).
- Në Cargo është stabilizuar një cache globale me informacione mbi përdorimin e fundit të të dhënave. Cache vendoset në skedarin $CARGO_HOME/.global-cache duke përdorur SQLite, azhurnohet automatikisht dhe reflekton ndryshimet më të fundit që lidhen me indeksin, skedarin crate, katalogun e kodit, git clone dhe git checkout.
Së fundmi, mund të përmendet gjuha e programimit Borgo, e cila përpiqet të jetë më e shprehshme se gjuha Go, por më pak komplekse se gjuha Rust. Borgo kombinon karakteristikat më të mira të Go dhe Rust, duke plotësuar mangësitë e secilës gjuhë. Për shembull, gjuha Go është e thjeshtë dhe e kuptueshme, por nuk ofron mjete të avancuara për sigurinë gjatë punës me tipe. Gjuha Rust ofron mjete për programim të sigurt, por është tepër e komplikuar. Projektin e zhvillon Marco Sampellegrini, autori i librit «The Simple Haskell Handbook» dhe zhvilluesi i sistemit të integrimit të vazhdueshëm Quad CI.

Borgo përdor tipizimin statik, tipa të ngjashëm me gjuhën Go dhe një sintaksë të ngjashme me Rust. Shënimi i pikave në fund të rreshtave në kodin e Borgo nuk është i obligueshëm. Kodi në gjuhën Borgo kompilon në një përfaqësim në gjuhën Go, i cili është krejtësisht i përshtatshëm me paketat që ekzistojnë për gjuhën Go. Kodi i kompajlerit është shkruar në gjuhën Rust dhe shpërndahet nën licencën ISC. use fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response { title: string, duration: int, } fn main() { let res = Response { title: "Hello world", duration: 0, } let state = NetworkState.Success(res) let msg = match state { NetworkState.Loading => "still loading", NetworkState.Failed(code) => fmt.Sprintf("Got error code: %d", code), NetworkState.Success(res) => res.title, } fmt.Println(msg) }
Burimi: opennet.ru
