Programski jezik Rust 1.60 izdanje

Objavljeno je izdanje Rust 1.60 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:

  • Rustc kompajler ima stabilizovan sistem zasnovan na LLVM-u za generisanje podataka o pokrivenosti koji se koriste za procenu pokrivenosti koda tokom testiranja. Da biste omogućili podatke o pokrivenosti tokom sastavljanja, morate koristiti oznaku “-Cinstrument-coverage”, na primjer, započinjući sklapanje naredbom “RUSTFLAGS=”-C instrument-coverage” cargo build”. Nakon pokretanja izvršne datoteke kompajlirane na ovaj način, default.profraw datoteka će biti sačuvana u trenutnom direktoriju, za obradu koju možete koristiti llvm-profdata uslužni program iz llvm-tools-preview komponente. Izlaz koji obrađuje llvm-profdata može se zatim proslijediti llvm-cov za generiranje izvješća o pokrivenosti koda s komentarima. Informacije o linku na izvorni kod se preuzimaju iz izvršne datoteke koja se ispituje, a koja uključuje potrebne podatke o povezanosti brojača pokrivenosti i koda. 1| 1|fn main() { 2| 1| println!("Zdravo, svijet!"); 3| 1|}
  • U menadžeru cargo paketa stabilizirana je podrška za “-timings” zastavicu, što uključuje generiranje detaljnog izvještaja o napretku izgradnje i vremenu izvršenja svakog koraka. Izvještaj može biti koristan za optimizaciju performansi procesa montaže.
  • Upravitelj cargo paketa nudi novu sintaksu za mehanizam uslovne kompilacije i odabira opcionih zavisnosti, konfigurisanu u datoteci Cargo.toml navođenjem liste imenovanih svojstava u sekciji [features] i aktiviranu omogućavanjem svojstava tokom izrade paketa koristeći zastavu “--features”. Nova verzija dodaje podršku za zavisnosti u odvojenim imenskim prostorima i slabe zavisnosti.

    U prvom slučaju, moguće je koristiti elemente s prefiksom “dep:” unutar odjeljka “[features]” za eksplicitno povezivanje s opcionom ovisnošću bez implicitnog predstavljanja ove ovisnosti kao značajke. U drugom slučaju je dodana podrška za označavanje znakom “?”. ("ime-paketa?/ime-feature") opcione zavisnosti koje bi trebalo da budu uključene samo ako neko drugo svojstvo uključuje datu opcionu zavisnost. Na primjer, u primjeru ispod, omogućavanje svojstva serde omogućit će ovisnost "serde", kao i svojstvo "serde" za ovisnost "rgb", ali samo ako je ovisnost "rgb" omogućena negdje drugdje: [zavisnosti] serde = { verzija = " 1.0.133", opciono = istina } rgb = { verzija = "0.8.25", opciono = istina } [karakteristike] serde = ["dep:serde", "rgb?/serde"]

  • Podrška za inkrementalnu kompilaciju, koja je bila onemogućena u prošlom izdanju, je vraćena. Greška kompajlera koja je dovela do onemogućavanja funkcije je riješena.
  • Rešeni su neki problemi sa obezbeđivanjem Instant tajmera sa garancijom monotonog vremena, koji uzima u obzir vreme koje je sistem proveo u režimu mirovanja. Ranije se OS API koristio kad god je to bilo moguće za rad sa tajmerom, koji nije uzimao u obzir problematične situacije koje narušavaju monotoniju vremena, kao što su hardverski problemi, korištenje virtuelizacije ili greške u operativnom sistemu.
  • Novi dio API-ja je premješten u kategoriju stabilnih, uključujući metode i implementacije osobina koje su stabilizirane:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • use::abs_diff
    • Prikaz za io::ErrorKind
    • Od za ExitCode
    • Ne za ! (ukucajte "nikad")
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Treći nivo podrške je implementiran za platforme mips64-openwrt-linux-musl* i armv7-unknown-linux-uclibceabi (softfloat). 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.
  • Kompajler je prebačen da koristi LLVM 14.

Osim toga, možete primijetiti:

  • Dodata podrška za pokretanje rustc kompajlera pomoću pozadine rustc_codegen_gcc, koja vam omogućava da koristite libgccjit biblioteku iz GCC projekta kao generator koda u rustc, što omogućava rustc-u da pruži podršku za arhitekture i optimizacije dostupne u GCC-u. Promocija kompajlera znači mogućnost korištenja GCC-baziranog generatora koda u rustc-u za izgradnju samog rustc kompajlera. S praktične strane, ova funkcija vam omogućava da napravite rust programe za arhitekture koje ranije nisu bile podržane u rustc-u.
  • Dostupno je izdanje alata uutils coreutils 0.0.13 u okviru kojeg se razvija analogni paket GNU Coreutils, prepisan na Rust jeziku. Coreutils dolazi sa preko stotinu uslužnih programa, uključujući sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln i ls. Cilj projekta je kreiranje višeplatformske alternativne implementacije Coreutilsa, sposobne za rad na Windows, Redox i Fuchsia platformama, kao i distribuciju pod dopuštenom MIT licencom, umjesto GPL copyleft licence.

    Nova verzija je poboljšala implementacije mnogih uslužnih programa, uključujući značajno poboljšanu kompatibilnost cp, dd, df, split i tr uslužnih programa sa njihovim kolegama iz GNU projekta. Obezbeđena onlajn dokumentacija. Clap parser se koristi za raščlanjivanje argumenata komandne linije, što je poboljšalo izlaz za oznaku “--help” i dodalo podršku za skraćenice dugih naredbi (na primjer, možete navesti “ls -col” umjesto “ls -color” ”).

izvor: opennet.ru

Dodajte komentar