à publikuar versioni i gjuhës së programimit të qëllimit të përgjithshëm Rust 1.78, e cila është krijuar nga projekti Mozilla, por aktualisht po zhvillohet nën mbikëqyrjen e një organizate të pavarur jo fitimprurëse, Rust Foundation. Gjuha fokusohet në sigurinë e punës me memorien dhe ofron mjete për arritjen e një paralelizmi të lartë në ekzekutimin e detyrave, ndërsa plotëson kërkesat pa përdorur ndihmësin e mbledhjes së plehrave dhe runtime (runtime reduktohet vetëm në inicializimin bazë dhe mbështetje për bibliotekën standarde).
Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin nga puna me nivel të ulët me kujtesën, siç janë referimi në një zonë kujtese pas çlirimit të saj, dereferimi i treguesve null, tejkalimi i kufijve të tamponëve etj. Për shpërndarjen e biblioteka, për të siguruar ndërtimin dhe menaxhimin e varësive, projekti zhvillon menaxherin e paketave Cargo. Për ruajtjen e bibliotekave, mbështetet depoja crates.io.
Përdorimi i sigurt i memories sigurohet në Rust gjatë kompilimit përmes verifikimit të lidhjeve, gjurmimit të pronësisë së objekteve, përllogaritjes së kohëzgjatjes së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në memorie gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtje nga tejkalimet e numrave të plotë, kërkon inicializim të detyrueshëm të vlerave të variablave para përdorimit, menaxhon më mirë gabimet në bibliotekën standarde, aplikon konceptin e lidhjeve dhe variablave të pandryshueshëm (immutable) si parazgjedhje, dhe ofron tipizim të fortë statik për minimizimin e gabimeve logjike.
TĂ« rejat kryesore:
- ĂshtĂ« propozuar njĂ« hapĂ«sirĂ« e re emri pĂ«r atributet "#[diagnostic]", e cila ofron mjete pĂ«r tĂ« ndikuar nĂ« mesazhet e gabimeve pĂ«r tĂ« cilat raporton kompajleri. E para nĂ« kĂ«tĂ« hapĂ«sirĂ« tĂ« re Ă«shtĂ« realizuar atributi "#[diagnostic::on_unimplemented]", i cili mund tĂ« pĂ«rdoret pĂ«r tĂ« konfiguruar mesazhet e gabimeve qĂ« jepen kur Ă«shtĂ« e nevojshme tĂ« pĂ«rdoret njĂ« trait qĂ« nuk Ă«shtĂ« implementuar pĂ«r njĂ« tip. #[diagnostic::on_unimplemented( message = "My Message for `ImportantTrait<{A}>` is not implemented for `{Self}`", label = "My Label", note = "Note 1", note = "Note 2" )] trait ImportantTrait<A> {} fn use_my_trait(_: impl ImportantTrait<i32>) {} fn main() { use_my_trait(String::new()); } error[E0277]: My Message for `ImportantTrait<i32>` is not implemented for `String` â> src/main.rs:12:18 | 12 | use_my_trait(String::new()); | ââââ ^^^^^^^^^^^^^ My Label | | | e nevojshme nga njĂ« kufizim i futur nga ky thirrje | = ndihmĂ«: trait-i `ImportantTrait<i32>` nuk Ă«shtĂ« implementuar pĂ«r `String` = shĂ«nim: Note 1 = shĂ«nim: Note 2
- Kontrollet paraprake assert që aplikohet për funksionet unsafe tani mund të vonohen deri në fazën e gjenerimit të kodit, duke lejuar që këto kontrolle të kryhen pa nevojën e ndërtimit të bibliotekës standarde në modalitetin "#[cfg(debug_assertions)]". Tani mjafton aktivizimi i asertave për debugging për ndërtimet testuese ose të debugging të kodit tuaj.
- Sjellja e funksioneve në bibliotekën standarde që ndikojnë në përputhshmërinë e treguesve dhe slice, tani është e parashikueshme gjatë ekzekutimit dhe varet nga të dhënat e hyrjes. Funksioni pointer::align_offset, që llogarit offset për përputhshmërinë e treguesve, tani kthen usize::MAX vetëm në rastin kur operacioni nuk mund të kryhet. Funksionet slice::align_to dhe slice::align_to_mut, të cilat konvertojnë slice në një përfaqësim me mes të përputhshëm dhe slice fillestar dhe përfundimtar, tani gjithmonë kthejnë pjesën më të madhe të mesme.
- Janë kaluar në statusin stabil:
- impl Read për &Stdin
- Lejohet përdorimi i një kohe jostatik (jo 'static) për disa implementime që lidhen me std::error::Error.
- Në implementimin impl<Fd: AsFd>, është e lejuar përdorimi i vlerës ?Sized.
- impl From<TryReserveError> për io::Error
- Funksioni Barrier::new() është stabilizuar për t'u përdorur me flakën "const" në çdo kontekst në vend të konstantave.
- 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-pc-windows-gnullvm, tani kërkohet të paktën versioni Windows 10.
- ĂshtĂ« realizuar niveli i tretĂ« i mbĂ«shtetjes pĂ«r platformat wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf dhe loongarch64-unknown-linux-musl. Niveli i tretĂ« nĂ«nkupton mbĂ«shtetje bazike, por pa testim automatizuar, publikim tĂ« ndĂ«rtimit zyrtar dhe verifikim tĂ« mundĂ«sisĂ« pĂ«r ndĂ«rtimin e kodit.
- ĂshtĂ« realizuar niveli i dytĂ« i mbĂ«shtetjes pĂ«r platformĂ«n Add wasm32-wasip1. Niveli i dytĂ« tĂ« mbĂ«shtetjes nĂ«nkupton garancinĂ« pĂ«r ndĂ«rtim.
- Platforma wasm32-wasi-preview1-threads është riemëruar në wasm32-wasip1-threads.
- Kompilatori është kaluar në përdorimin e LLVM 18. Duke përdorur LLVM 18 për arkitekturat x86-32 dhe x86-64, është ndryshuar ABI që lidhet me tipet u128 dhe i128.
- Në menaxherin e paketave Cargo është stabilizuar versioni 4 i skedarëve të bllokimit (lockfile v4).
- Në Cargo është stabilizuar cache global me informacion mbi përdorimin e fundit të të dhënave. Cache shtrihet në skedarin $CARGO_HOME/.global-cache me ndihmën e SQLite, përditësohet automatikisht dhe pasqyron ndryshimet e fundit që lidhen me indeksin, skedarin crate, katalogun me kod, git clone dhe git checkout.
Gjithashtu mund të theksohet gjuha e programimit Borgo, e cila përpiqet të jetë më e shprehshme se gjuha Go, por më pak e komplikuar 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, gjuha Go është e thjeshtë dhe e qartë, por nuk ofron mjete të avancuara për sigurimin e sigurisë gjatë punës me tipe. Gjuha Rust ofron mjete për programim të sigurt, por është e komplikuar. Projekti zhvillohet nga Marco Sampellegrini, autori i librit "The Simple Haskell Handbook" dhe zhvilluesi i sistemit të integrimit të vazhdueshëm Quad CI.

Në Borgo përdoret tipizimi statik, me lloje të ngjashme me ato të gjuhës Go dhe sintaksë të ngjashme me atë të Rust. Shënimi i pikave me ndihmë në fund të rreshtave në kodin Borgo nuk është i detyrueshëm. Kodi në gjuhën Borgo kompilohet në një përfaqësim në gjuhën Go, e cila është plotësisht e kompatibilshme me paketat ekzistuese për gjuhën Go. Kodi i kompilatorit ë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
