Rust 1.78 objavljen. Borgo jezik koji kombinuje prednosti Go i Rusta

Objavljeno je izdanje Rust 1.78 programskog jezika opšte namjene, koji je osnovan od strane Mozilla projekta, a koji je sada razvijen pod okriljem nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža sredstva za postizanje visokog paralelizma poslova uz izbjegavanje upotrebe sakupljača smeća i vremena izvođenja (vrijeme izvođenja je svedeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programera od grešaka prilikom manipulacije pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskom nivou, kao što je pristup memorijskoj oblasti nakon što je ona oslobođena, dereferenciranje nultih pokazivača, prekoračenje bafera itd. Za distribuciju biblioteka, izradu i upravljanje ovisnostima, projekt razvija Cargo paket menadžer. Crates.io spremište je podržano za hostovanje biblioteka.

Sigurnost memorije je osigurana u Rustu u vrijeme kompajliranja kroz provjeru referenci, praćenje vlasništva nad objektom, praćenje životnog vijeka objekata (opsega) i procjenu ispravnosti pristupa memoriji tokom izvršavanja koda. Rust također pruža zaštitu od prekoračenja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli po defaultu, nudi snažno statičko kucanje kako bi se minimizirale logičke greške.

Glavne inovacije:

  • Predložen je novi prostor imena atributa "#[diagnostic]", koji pruža način da utiče na poruke o grešci koje proizvodi kompajler. Prvi u novom prostoru je atribut "#[diagnostic::on_unimplemented]", koji se može koristiti za prilagođavanje poruka o grešci u situaciji kada trebate koristiti osobinu koja nije implementirana za tip. #[diagnostic::on_unimplemented( message = "Moja poruka za `ImportantTrait<{A}>` nije implementirana za `{Self}`", label = "Moja oznaka", note = "Napomena 1", note = "Napomena 2" )] osobina ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } greška[E32]: Moja poruka za `ImportantTrait ` nije implementiran za `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ My Label | | | zahtijeva veza uvedena ovim pozivom | = pomoć: osobina `ImportantTrait ` nije implementiran za `String` = napomena: Napomena 18 = napomena: Napomena 12
  • Provjere prije potvrđivanja primijenjene na nesigurne funkcije sada se mogu odgoditi do generiranja koda, što omogućava da se ove provjere izvode bez potrebe za izgradnjom standardne biblioteke u "#[cfg(debug_assertions)]" modu. Da biste pokrenuli provjere, sada je dovoljno omogućiti tvrdnje za otklanjanje grešaka za testiranje ili debug build vašeg koda.
  • Ponašanje funkcija u standardnoj biblioteci koje utječu na poravnanje pokazivača i rezova sada je predvidljivo u vrijeme izvođenja i ovisi o ulaznim podacima. Funkcija pointer::align_offset, koja izračunava pomak za poravnavanje pokazivača, sada vraća usize::MAX samo ako operacija ne uspije. Funkcije slice::align_to i slice::align_to_mut obje, koje pretvaraju rezove u reprezentaciju sa poravnatim srednjim isječkom i originalnim početnim i krajnjim rezovima, sada uvijek vraćaju najveći srednji dio.
  • U stabilnu kategoriju prebačeni su:
    • impl Čitanje za &Stdin
    • Dozvolite upotrebu nestatičkog (nestatičkog) životnog vijeka za neke implementacije vezane za std::error::Error.
    • Impl implementacija ?Vrijednost veličine je dozvoljena.
    • impl From za io::Greška
  • Funkcija Barrier::new() je stabilizirana da se koristi s atributom "const" u bilo kojem kontekstu umjesto konstantama.
  • 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-gnu sada je potrebna barem verzija Windows 10.
  • Treći nivo podrške je implementiran za platforme wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf i loongarch64-unknown-linux-musl. Treći nivo uključuje osnovnu podršku, ali bez automatskog testiranja, objavljivanja službenih verzija ili provjere da li se kod može izgraditi.
  • Drugi nivo podrške za ciljnu platformu Add wasm32-wasip1 je implementiran. Drugi nivo podrške uključuje garanciju za montažu.
  • Platforma wasm32-wasi-preview1-threads je preimenovana u wasm32-wasip1-threads.
  • Kompajler je prebačen da koristi LLVM 18. Kada se koristi LLVM 18 za x86-32 i x86-64 arhitekture, ABI pridružen tipovima u128 i i128 je promijenjen.
  • U Cargo pakt manageru, verzija 4 zaključanih datoteka (lockfile v4) je stabilizirana.
  • Cargo ima stabiliziranu globalnu keš memoriju s informacijama o najnovijim korištenjem podataka. Keš memorija se nalazi u $CARGO_HOME/.global-cache koristeći SQLite i automatski se ažurira kako bi odražavala najnovije promjene u indeksu, fajlu sanduka, direktoriju koda, git klonu i git checkoutu.

Pored toga, Borgo programski jezik pokušava da bude izražajniji od Go jezika, ali manje složen od Rust jezika. Borgo kombinuje najbolje karakteristike Go i Rusta, nadoknađujući nedostatke svakog jezika. Na primjer, Go je jednostavan i jasan, ali ne pruža napredne sigurnosne funkcije. Rust jezik pruža alate za sigurno programiranje, ali je previše komplikovan. Projekat razvija Marco Sampellegrini, autor The Simple Haskell Handbook i programer Quad CI sistema kontinuirane integracije.

Rust 1.78 objavljen. Borgo jezik koji kombinuje prednosti Go i Rusta

Borgo koristi statično kucanje, tipove nalik Go i sintaksu sličnu Rust-u. Tačke i zareze su opcione na kraju reda u Borgo kodu. Borgo kod se kompajlira u Go reprezentaciju koja je potpuno kompatibilna sa postojećim Go paketima. Kod kompajlera je napisan u Rustu i distribuira se pod ISC licencom. koristite fmt enum NetworkState { Učitavanje, Neuspješno(int), Uspjeh(T), } struct Odgovor { naslov: string, trajanje: int, } fn main() { let res = Odgovor { naslov: “Zdravo svijete”, trajanje: 0, } pusti stanje = NetworkState.Success(res) neka msg = odgovara stanju { NetworkState.Loading => “i dalje se učitava”, NetworkState.Failed(code) => fmt.Sprintf(“Imam kod greške: %d”, kod), NetworkState.Success (res) => res.title, } fmt.Println(msg) }

izvor: opennet.ru

Dodajte komentar