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 oceno pokritosti kode med testiranjem. Če želite omogočiti podatke o pokritosti med gradnjo, uporabite zastavico "-C instrument-coverage", na primer tako, da zaženete gradnjo z ukazom "RUSTFLAGS="-C instrument-coverage" cargo build". Po zagonu tako zgrajene izvedljive datoteke se bo datoteka default.profraw shranila v trenutni imenik, ki jo je mogoče obdelati s pripomočkom llvm-profdata iz komponente llvm-tools-preview. Izhod, ki ga obdela llvm-profdata, se nato lahko posreduje llvm-cov za generiranje poročila z opombami in informacijami o pokritosti kode. Informacije o vezavi na izvorna besedila so vzete iz pregledovane izvedljive datoteke, ki vključuje potrebne podatke o odnosu števcev pokritosti do kode. 1| 1|fn main() { 2| 1| println!("Pozdravljen, svet!"); 3| 1|}
  • Upravitelj paketov cargo ima stabilizirano podporo za zastavico »--timings«, ki omogoča ustvarjanje podrobnega poročila o napredku gradnje in času izvajanja posameznega koraka. To poročilo je lahko uporabno za optimizacijo delovanja procesa gradnje.
  • Upravitelj paketov cargo uvaja novo sintakso za pogojno prevajanje in neobvezno izbiro odvisnosti. Ta sintaksa je konfigurirana v datoteki Cargo.toml z navedbo imenovanih lastnosti v razdelku [features] in je omogočena z vključitvijo 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 smo implementirali možnost uporabe elementov s predpono »dep:« znotraj razdelka »[features]« za eksplicitno vezavo na neobvezno odvisnost, ne da bi ta odvisnost implicitno izpostavili kot funkcijo. V drugem primeru smo dodali podporo za označevanje neobveznih odvisnosti z »?« (»ime-paketa?/ime-funkcije«), ki naj bi bil vključen le, če druga lastnost vključuje to neobvezno odvisnost. Na primer, v spodnjem primeru bo vključitev lastnosti serde vključevala odvisnost »serde« in lastnost »serde« za odvisnost »rgb«, vendar le, če je odvisnost »rgb« vključena drugje: [dependencies] serde = { version = »1.0.133«, optional = true } rgb = { version = »0.8.25«, optional = true } [features] serde = [»dep:serde«, »rgb?/serde«]

  • Podpora za inkrementalno prevajanje, ki je bila v prejšnji izdaji onemogočena, je bila ponovno vzpostavljena. Napaka prevajalnika, zaradi katere je bila ta funkcija onemogočena, je bila odpravljena.
  • Odpravljenih je bilo več težav z garancijo za monotono izračunavanje časa funkcije Instant Timer, ki upošteva čas, ki ga je sistem preživel v stanju mirovanja. Prej se je časovnik, kadar koli je bilo mogoče, zanašal na API operacijskega sistema, kar ni upoštevalo problematičnih situacij, ki so motile monotonost časa, kot so težave s strojno opremo, virtualizacija ali napake operacijskega sistema.
  • Nov del API-ja je bil premaknjen v kategorijo stabilnega, vključno s stabiliziranimi metodami in implementacijami lastnosti:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • 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 ! (vpišite "nikoli")
    • _Op_Assign<$t>
    • arch::zaznana_je_funkcija_aarch64!
  • Za platformi mips64-openwrt-linux-musl* in armv7-unknown-linux-uclibceabi (softfloat) je bila uvedena podpora 3. stopnje. 3. stopnja zagotavlja osnovno podporo, vendar brez avtomatiziranega testiranja, uradnih izdaj gradenj ali preverjanja gradenj.
  • Prevajalnik je bil preklopljen na uporabo LLVM 14.

Poleg tega lahko upoštevate:

  • Dodana je podpora za zagon prevajalnika rustc z uporabo zalednega sistema rustc_codegen_gcc. To omogoča uporabo knjižnice libgccjit projekta GCC kot generatorja kode v rustc, kar rustc omogoča podporo arhitekturam in optimizacijam, ki so na voljo v GCC. Zagon prevajalnika se nanaša na možnost uporabe generatorja kode, ki temelji na GCC, v rustc za izgradnjo samega prevajalnika rustc. V praksi ta funkcija omogoča gradnjo programov Rust za arhitekture, ki jih rustc prej ni podpiral.
  • Izšla je različica 0.0.13 kompleta orodij uutils coreutils. Razvija na Rustu temelječ ekvivalent paketa GNU Coreutils. Coreutils vključuje več kot 100 pripomočkov, vključno s sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln in ls. Cilj projekta je ustvariti večplatformsko alternativo Coreutils, ki bi lahko delovala na platformah, vključno z Windows, Redox in Fuchsia ter distribucija pod permisivno licenco MIT namesto pod licenco copyleft GPL.

    Nova različica izboljšuje implementacijo številnih pripomočkov, vključno z bistveno izboljšano združljivostjo cp, dd, df, split in tr z njihovimi ustrezniki GNU. Spletna dokumentacija je zdaj na voljo. Razčlenjevalnik clap se uporablja za razčlenjevanje argumentov ukazne vrstice, s čimer se izboljša izhod za zastavico »--help« in doda podpora za okrajšave dolgih ukazov (na primer, namesto »ls --color« lahko uporabite »ls --col«).

Vir: opennet.ru

Kupite zanesljivo gostovanje za strani z DDoS zaščito, VPS VDS strežniki 🔥 Kupite zanesljivo spletno gostovanje z zaščito DDoS, VPS VDS strežniki | ProHoster