Lëshimi i Rust 1.78. Gjuha Borgo, që kombinon forcat e Go dhe Rust

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.

Lëshimi i Rust 1.78. Gjuha Borgo, që kombinon forcat e Go dhe Rust

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

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