Izdaja programskega jezika Rust 1.60

Objavljena je bila izdaja splošnega programskega jezika Rust 1.60, ki ga je ustanovil projekt Mozilla, zdaj pa se razvija pod okriljem neodvisne neprofitne organizacije Rust Foundation. Jezik se osredotoča na varnost pomnilnika in zagotavlja sredstva za doseganje visoke paralelnosti opravil, hkrati pa se izogiba uporabi zbiralnika smeti in izvajalnega okolja (izvajalni čas je zmanjšan na osnovno inicializacijo in vzdrževanje standardne knjižnice).

Rustove metode ravnanja s pomnilnikom rešijo razvijalca pred napakami pri ravnanju s kazalci in ščitijo pred težavami, ki nastanejo zaradi ravnanja s pomnilnikom na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnih kazalcev, prekoračitev medpomnilnika itd. Za distribucijo knjižnic, zagotavljanje gradenj in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo. Repozitorij crates.io je podprt za gostovanje knjižnic.

Varnost pomnilnika je v Rustu zagotovljena v času prevajanja s preverjanjem sklicevanj, spremljanjem lastništva objekta, spremljanjem življenjskih dob objektov (obseg) in ocenjevanjem pravilnosti dostopa do pomnilnika med izvajanjem kode. Rust zagotavlja tudi zaščito pred celoštevilskimi prelivi, zahteva obvezno inicializacijo vrednosti spremenljivk pred uporabo, bolje obravnava napake v standardni knjižnici, privzeto uporablja koncept nespremenljivih referenc in spremenljivk, ponuja močno statično tipkanje za zmanjšanje logičnih napak.

Glavne novosti:

  • Prevajalnik rustc ima stabiliziran sistem, ki temelji na LLVM, za generiranje podatkov o pokritosti, ki se uporabljajo za ocenjevanje pokritosti kode med testiranjem. Če želite med sestavljanjem omogočiti podatke o pokritosti, morate uporabiti zastavico »-Cinstrument-coverage«, na primer zagon sestavljanja z ukazom »RUSTFLAGS=«-C instrument-coverage« cargo build«. Po zagonu tako prevedene izvršljive datoteke se bo datoteka default.profraw shranila v trenutni imenik, za obdelavo katere lahko uporabite pripomoček llvm-profdata iz komponente llvm-tools-preview. Izhodne podatke, ki jih obdela llvm-profdata, je mogoče nato posredovati llvm-cov za ustvarjanje poročila o pokritosti kode z opombami. Podatki o povezavi do izvorne kode so vzeti iz pregledovane izvršljive datoteke, ki vsebuje potrebne podatke o povezavi med števci pokritosti in kodo. 1| 1|fn main() { 2| 1| println!("Pozdravljen, svet!"); 3| 1|}
  • V upravitelju tovornih paketov je bila stabilizirana podpora za zastavico “-timings”, ki vključuje generiranje podrobnega poročila o napredku gradnje in času izvajanja vsakega koraka. Poročilo je lahko koristno za optimizacijo delovanja postopka sestavljanja.
  • Upravitelj paketov cargo ponuja novo sintakso za mehanizem pogojnega prevajanja in izbire izbirnih odvisnosti, ki je konfiguriran v datoteki Cargo.toml z navedbo seznama imenovanih lastnosti v razdelku [features] in aktiviran z omogočanjem lastnosti med gradnjo paketa. z uporabo zastavice »--features«. Nova različica dodaja podporo za odvisnosti v ločenih imenskih prostorih in šibke odvisnosti.

    V prvem primeru je mogoče uporabiti elemente s predpono »dep:« znotraj razdelka »[features]« za eksplicitno povezavo z neobvezno odvisnostjo, ne da bi to odvisnost implicitno predstavili kot funkcijo. V drugem primeru je dodana podpora za označevanje z znakom »?«. ("ime-paketa?/ime-funkcije") izbirne odvisnosti, ki bi morale biti vključene le, če neka druga lastnost vključuje dano izbirno odvisnost. Na primer, v spodnjem primeru bo omogočanje lastnosti serde omogočilo odvisnost "serde" in lastnost "serde" za odvisnost "rgb", vendar le, če je odvisnost "rgb" omogočena drugje: [odvisnosti] serde = { različica = " 1.0.133", izbirno = resnično } rgb = { različica = "0.8.25", izbirno = resnično } [funkcije] serde = ["dep:serde", "rgb?/serde"]

  • Podpora za inkrementalno prevajanje, ki je bila onemogočena v zadnji izdaji, je bila vrnjena. Napaka prevajalnika, zaradi katere je bila funkcija onemogočena, je bila odpravljena.
  • Odpravljene so nekatere težave z zagotavljanjem časovnikov Instant z jamstvom za monotono merjenje časa, ki upošteva čas, ki ga sistem porabi v načinu mirovanja. Prej se je za upravljanje časovnika, kjer je bilo mogoče, uporabljal OS API, ki ni upošteval problematičnih situacij, ki porušijo monotonost časa, kot so težave s strojno opremo, uporaba virtualizacije ali napake v operacijskem sistemu.
  • Nov del API-ja je bil premaknjen v kategorijo stabilnega, vključno s stabiliziranimi metodami in implementacijami lastnosti:
    • Arc::new_cyclic
    • Rc::novo_ciklično
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MordaUninit::assume_init_drop
    • MogočeUninit::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
    • uporaba::abs_diff
    • Prikaz za io::ErrorKind
    • Od za ExitCode
    • Ne za! (vtipkajte "nikoli")
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Tretja raven podpore je bila implementirana za platformi mips64-openwrt-linux-musl* in armv7-unknown-linux-uclibceabi (softfloat). Tretja raven vključuje osnovno podporo, vendar brez avtomatiziranega testiranja, objave uradnih gradenj ali preverjanja, ali je kodo mogoče zgraditi.
  • Prevajalnik je bil preklopljen na uporabo LLVM 14.

Poleg tega lahko upoštevate:

  • Dodana podpora za zagon prevajalnika rustc z zaledjem rustc_codegen_gcc, ki vam omogoča uporabo knjižnice libgccjit iz projekta GCC kot generator kode v rustc, kar omogoča rustc zagotavljanje podpore za arhitekture in optimizacije, ki so na voljo v GCC. Promocija prevajalnika pomeni možnost uporabe generatorja kode, ki temelji na GCC, v rustc za izdelavo samega prevajalnika rustc. Na praktični strani vam ta funkcija omogoča izdelavo programov rust za arhitekture, ki prej niso bile podprte v rustc.
  • Na voljo je izdaja kompleta orodij uutils coreutils 0.0.13, v okviru katerega se razvija analog paketa GNU Coreutils, prepisan v jeziku Rust. Coreutils ima več kot sto pripomočkov, vključno z sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln in ls. Cilj projekta je ustvariti večplatformno alternativno implementacijo Coreutils, ki bo zmožna delovati na platformah Windows, Redox in Fuchsia, ter distribucijo pod permisivno licenco MIT namesto licence GPL copyleft.

    Nova različica ima izboljšane izvedbe številnih pripomočkov, vključno z znatno izboljšano združljivostjo pripomočkov cp, dd, df, split in tr z njihovimi sorodniki iz projekta GNU. Zagotovljena spletna dokumentacija. Razčlenjevalnik clap se uporablja za razčlenjevanje argumentov ukazne vrstice, kar je izboljšalo izhod za zastavico »--help« in dodalo podporo za okrajšave dolgih ukazov (na primer, lahko podate »ls -col« namesto »ls -color« «).

Vir: opennet.ru

Dodaj komentar