Izlazak Rust 1.78. Jezik Borgo, koji kombinira prednosti Go i Rust

Objavljen je Rust 1.78, jezik opće namjene koji je izvorno razvijen od strane Mozille, a sada se razvija pod okriljem neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnu upotrebu memorije i pruža alate za postizanje visokog paralelizma izvršavanja zadaća, bez korištenja sakupljača smeća i runtime-a (runtime se svodi na osnovnu inicijalizaciju i podršku za standardnu biblioteku).

Metode manipulacije memorijom u Rustu oslobodile su programere od grešaka prilikom rukovanja pokazivačima i štite od problema koji proizlaze iz niskorazredne obrade memorije, poput pristupanja memoriji nakon što je oslobođena, dereferenciranja nul pokazivača, izlaska iz granica bafera itd. Za distribuciju biblioteka, osiguranje izgradnje i upravljanje ovisnostima, projekat se razvija putem upravitelja paketa Cargo. Za pohranu biblioteka podržava se repozitorij crates.io.

Sigurna manipulacija memorijom osigurava se u Rustu tijekom kompilacije provjerom referenci, praćenjem vlasništva nad objektima, uzimanjem u obzir vremena života objekata (opseg vidljivosti) i ocjenom točnosti pristupa memoriji tijekom izvršavanja koda. Rust također pruža sredstva za zaštitu od cjelobrojnih prekoračenja, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabla kao zadano te nudi snažnu statičku tipizaciju za minimiziranje logičkih grešaka.

Glavne novine:

  • Predloženo je novo ime prostora atributa „#[diagnostic]“, koje pruža sredstva za utjecaj na poruke o greškama koje generira kompajler. Prvi atribut u novom prostoru je „#[diagnostic::on_unimplemented]“, koji se može koristiti za prilagodbu poruka o greškama kada je potrebna upotreba tipa koji nije implementiran za određeni tip. #[diagnostic::on_unimplemented( message = „Moja poruka za `ImportantTrait<{A}>` nije implementirana za `{Self}`“, label = „Moja oznaka“, note = „Napomena 1“, note = „Napomena 2“ )] trait ImportantTrait<A> {} fn use_my_trait(_: impl ImportantTrait<i32>) {} fn main() { use_my_trait(String::new()); } error[E0277]: Moja poruka za `ImportantTrait<i32>` nije implementirana za `String` —> src/main.rs:12:18 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Moja oznaka | | | potrebna po osnovi koja je uvedena ovim pozivom | = pomoc: trait `ImportantTrait<i32>` nije implementiran za `String` = napomena: Napomena 1 = napomena: Napomena 2
  • Prethodne provjere assert, koje se primjenjuju na unsafe funkcije, sada se mogu odgađati do faze generacije koda, što omogućuje izvođenje tih provjera bez potrebe za sastavljanjem standardne biblioteke u režimu „#[cfg(debug_assertions)]“. Za aktivaciju provjera sada je dovoljno uključiti odabrane assert-e za testne ili debug verzije vlastitog koda.
  • Ponašanje funkcija u standardnoj biblioteci koje utječu na poravnanje pokazivača i rezova (slice) je sada predvidljivo tijekom izvršenja i ovisi o ulaznim podacima. Funkcija pointer::align_offset, koja izračunava pomak za poravnanje pokazivača, sada vraća usize::MAX samo ako operacija nije moguća. Funkcije slice::align_to i slice::align_to_mut, koje pretvaraju rezove u prikaz s poravnanjem srednjem rezu i izvorna prva i posljednja reza, sada uvijek vraćaju najveći mogući srednji dio.
  • U stabilne verzije prebačeni su:
    • impl Read for &Stdin
    • Dopustivo je korištenje nestatičnog (ne 'static) vremena trajanja za određene implementacije vezane uz std::error::Error.
    • U implementaciji impl dopušteno je korištenje vrijednosti ?Sized.
    • impl From for io::Error
  • Funkcija Barrier::new() stabilizirana je za korištenje s znakom 'const' u bilo kojem kontekstu umjesto konstante.
  • Za ciljne platforme x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm i i686-pc-windows-gnullvm sada je potrebna najmanje verzija Windows 10.
  • Implementirana je treća razina podrške za platforme wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf i loongarch64-unknown-linux-musl. Treća razina podrazumijeva osnovnu podršku, ali bez automatiziranog testiranja, objavljivanja službenih gradnji i provjere mogućnosti gradnje koda.
  • Implementirana je druga razina podrške za ciljnu platformu Add wasm32-wasip1. Druga razina podrške podrazumijeva jamstvo gradnje.
  • Platforma wasm32-wasi-preview1-threads preimenovana je u wasm32-wasip1-threads.
  • Kompajler je prešao na korištenje LLVM 18. Pri korištenju LLVM 18 za arhitekture x86-32 i x86-64 promijenjen je ABI povezan s tipovima u128 i i128.
  • U menadžeru paketa Cargo stabilizirana je 4. verzija datoteka za zaključavanje (lockfile v4).
  • U Cargo-u je stabiliziran globalni cache s informacijama o posljednjem korištenju podataka. Cache se smješta u datoteku $CARGO_HOME/.global-cache pomoću SQLite-a, automatski se ažurira i odražava posljednje promjene povezane s indeksom, crate datotekom, katalogom s kodom, git clone i git checkout.

Dodatno se može spomenuti programski jezik Borgo, koji nastoji biti izražajniji od jezika Go, ali manje složen od jezika Rust. Borgo kombinira najbolje osobine Go i Rust, ispunjavajući nedostatke svakog od jezika. Na primjer, jezik Go je jednostavan i jasan, ali ne pruža napredna sredstva za osiguranje sigurnosti pri radu s tipovima. Jezik Rust pruža sredstva za sigurno programiranje, ali je prekompliciran. Projekt razvija Marco Sampellegrini, autor knjige 'The Simple Haskell Handbook' i razvijač sustava neprekidne integracije Quad CI.

Izlazak Rust 1.78. Jezik Borgo, koji kombinira prednosti Go i Rust

U Borgu se koristi statička tipizacija, slične vrste i sintaksu kao u jeziku Go. Navođenje točaka sa zarezom na kraju linija u kodu na Borgu nije obavezno. Kod na jeziku Borgo se kompajlira u prikaz na jeziku Go, koji je potpuno kompatibilan sa postojećim paketima za jezik Go. Kod kompajlera napisan je na jeziku Rust i distribuira se pod ISC licencom. use fmt enum NetworkState { Učitavanje, Neuspjeh(int), Uspjeh(T), } struct Response { naslov: string, trajanje: int, } fn main() { let res = Response { naslov: «Hello world», trajanje: 0, } let stanje = NetworkState.Uspjeh(res) let msg = match stanje { NetworkState.Učitavanje => «još se učitava», NetworkState.Neuspjeh(kod) => fmt.Sprintf(«Dobili smo kod greške: %d», kod), NetworkState.Uspjeh(res) => res.naslov, } fmt.Println(msg) }

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster