Izdanje Rust programskog jezika 1.60

Objavljen je programski jezik opće namjene Rust 1.60, utemeljen na projektu Mozilla, ali sada razvijen pod pokroviteljstvom nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža sredstva za postizanje visokog paralelizma poslova uz izbjegavanje upotrebe skupljača smeća i vremena izvođenja (vrijeme izvođenja je smanjeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programere od pogrešaka pri manipuliranju pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskoj razini, kao što je pristup memorijskom području nakon što je ono oslobođeno, dereferenciranje nultih pokazivača, prekoračenje međuspremnika, itd. Za distribuciju biblioteka, pružanje nadogradnji i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo. Repozitorij crates.io podržan je za smještaj knjižnica.

Sigurnost memorije osigurana je u Rustu tijekom kompajliranja provjerom referenci, praćenjem vlasništva objekta, praćenjem životnih vijekova objekta (opsega) i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža zaštitu od prekoračenja cjelobrojnih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje pogreške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli prema zadanim postavkama, nudi snažno statično tipkanje za smanjenje logičkih pogrešaka.

Glavne inovacije:

  • Rustc kompajler ima stabilizirani sustav temeljen na LLVM-u za generiranje podataka o pokrivenosti koji se koriste za procjenu pokrivenosti koda tijekom testiranja. Da biste omogućili podatke o pokrivenosti tijekom sklapanja, morate koristiti oznaku “-Instrument-coverage”, na primjer, pokretanjem sklopa s naredbom “RUSTFLAGS=”-C instrument-coverage” cargo build”. Nakon pokretanja ovako kompajlirane izvršne datoteke, datoteka default.profraw bit će spremljena u trenutni direktorij, za čiju obradu možete koristiti pomoćni program llvm-profdata iz komponente llvm-tools-preview. Izlaz koji obrađuje llvm-profdata može se zatim proslijediti llvm-cov za generiranje izvješća o pokrivenosti koda s komentiranim oznakama. Podaci o poveznici s izvornim kodom preuzimaju se iz izvršne datoteke koja se ispituje, a koja uključuje potrebne podatke o vezi između brojača pokrivenosti i koda. 1| 1|fn main() { 2| 1| println!("Zdravo, svijete!"); 3| 1|}
  • U cargo package manageru stabilizirana je podrška za oznaku “-timings” koja uključuje generiranje detaljnog izvješća o napretku izgradnje i vremenu izvršenja svakog koraka. Izvješće može biti korisno za optimizaciju izvedbe procesa sklapanja.
  • Upravitelj paketa tereta nudi novu sintaksu za mehanizam uvjetne kompilacije i odabir neobaveznih ovisnosti, konfiguriran u datoteci Cargo.toml ispisivanjem popisa imenovanih svojstava u odjeljku [značajke] i aktiviran omogućavanjem svojstava tijekom izgradnje paketa korištenjem oznake “--features”. Nova verzija dodaje podršku za ovisnosti u zasebnim imenskim prostorima i slabe ovisnosti.

    U prvom slučaju, moguće je koristiti elemente s prefiksom "dep:" unutar odjeljka "[značajke]" za izričito povezivanje s izbornom ovisnošću bez implicitnog predstavljanja ove ovisnosti kao značajke. U drugom slučaju dodana je podrška za označavanje znakom “?”. ("package-name?/feature-name") izborne ovisnosti koje bi trebale biti uključene samo ako neko drugo svojstvo uključuje danu izbornu ovisnost. Na primjer, u donjem primjeru, 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: [ovisnosti] serde = { verzija = " 1.0.133", izborno = istinito } rgb = { verzija = "0.8.25", izborno = istinito } [značajke] serde = ["dep:serde", "rgb?/serde"]

  • Podrška za inkrementalnu kompilaciju, koja je bila onemogućena u prošlom izdanju, je vraćena. Greška prevoditelja koja je uzrokovala onemogućavanje značajke je riješena.
  • Riješeni su neki problemi s pružanjem Instant timera s jamstvom monotonog mjerenja vremena, koje uzima u obzir vrijeme koje je sustav proveo u načinu mirovanja. Prethodno se za upravljanje mjeračem vremena kad god je to bilo moguće koristio OS API koji nije uzimao u obzir problematične situacije koje razbijaju monotoniju vremena, kao što su hardverski problemi, korištenje virtualizacije ili greške u operativnom sustavu.
  • Novi dio API-ja premješten je u kategoriju stabilnih, uključujući metode i implementacije karakteristika koje su stabilizirane:
    • Arc::new_cyclic
    • Rc::novi_ciklički
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::rezervni_kapacitet_mut
    • MoždaUninit::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
    • upotreba::abs_diff
    • Prikaz za io::ErrorKind
    • Od za ExitCode
    • Nije za ! (upišite "nikad")
    • _Op_Dodijeli<$t>
    • arch::is_aarch64_feature_detected!
  • Treća razina podrške implementirana je za platforme mips64-openwrt-linux-musl* i armv7-unknown-linux-uclibceabi (softfloat). Treća razina uključuje osnovnu podršku, ali bez automatiziranog testiranja, objavljivanja službenih međugradnji ili provjere može li se kod izgraditi.
  • Kompajler je prebačen na korištenje LLVM 14.

Osim toga, možete primijetiti:

  • Dodana podrška za pokretanje rustc prevoditelja pomoću rustc_codegen_gcc pozadine, koja vam omogućuje korištenje libgccjit biblioteke iz GCC projekta kao generatora koda u rustc-u, što omogućuje rustc-u da pruži podršku za arhitekture i optimizacije dostupne u GCC-u. Promocija prevoditelja znači mogućnost korištenja generatora koda temeljenog na GCC-u u rustc-u za izgradnju samog rustc prevoditelja. S praktične strane, ova vam značajka omogućuje izradu rust programa za arhitekture koje prethodno nisu bile podržane u rustc-u.
  • Dostupno je izdanje alata uutils coreutils 0.0.13, unutar kojeg se razvija analog GNU Coreutils paketa, prepisanog u Rust jeziku. Coreutils dolazi s preko sto uslužnih programa, uključujući sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln i ls. Cilj projekta je stvoriti višeplatformsku alternativnu implementaciju Coreutilsa, sposobnu za rad na Windows, Redox i Fuchsia platformama, kao i distribuciju pod permisivnom MIT licencom, umjesto GPL copyleft licence.

    Nova verzija ima poboljšane implementacije mnogih uslužnih programa, uključujući značajno poboljšanu kompatibilnost cp, dd, df, split i tr uslužnih programa s njihovim parnjacima iz GNU projekta. Osigurana online dokumentacija. Clap parser koristi se za raščlanjivanje argumenata naredbenog retka, što je poboljšalo izlaz za zastavu "--help" i dodalo podršku za kratice dugih naredbi (na primjer, možete navesti "ls -col" umjesto "ls -color" ”).

Izvor: opennet.ru

Dodajte komentar