Lëshimi i Rust 1.78. Gjuha Borgo, e cila kombinon pikat më të forta të Go dhe Rust

È 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.

Lëshimi i Rust 1.78. Gjuha Borgo, e cila kombinon pikat më të forta të Go dhe Rust

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

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster