Publikimi i gjuhës programuese Rust 1.60

Gjuha e programimit për qëllime të përgjithshme Rust 1.60, e themeluar nga projekti Mozilla, por tani e zhvilluar nën kujdesin e organizatës së pavarur jofitimprurëse Rust Foundation, është publikuar. Gjuha fokusohet në sigurinë e kujtesës dhe siguron mjetet për të arritur paralelizëm të lartë të punës duke shmangur përdorimin e një grumbulluesi të mbeturinave dhe kohën e funksionimit (koha e funksionimit reduktohet në inicializimin bazë dhe mirëmbajtjen e bibliotekës standarde).

Metodat e trajtimit të memories Rust e ruajnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin për shkak të trajtimit të nivelit të ulët të kujtesës, të tilla si qasja në një zonë memorie pasi të jetë liruar, mosreferencimi i treguesve null, tejkalimet e buferit, etj. Për të shpërndarë bibliotekat, për të ofruar ndërtime dhe për të menaxhuar varësitë, projekti zhvillon menaxherin e paketave Cargo. Depoja e crates.io mbështetet për pritjen e bibliotekave.

Siguria e memories sigurohet në Rust në kohën e përpilimit përmes kontrollit të referencës, mbajtjes së gjurmës së pronësisë së objektit, mbajtjes së gjurmëve të jetëgjatësisë së objektit (scopes) dhe vlerësimit të saktësisë së aksesit në kujtesë gjatë ekzekutimit të kodit. Rust siguron gjithashtu mbrojtje kundër tejmbushjeve të numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave përpara përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pandryshueshme si parazgjedhje, ofron shtypje të fortë statike për të minimizuar gabimet logjike.

Risitë kryesore:

  • Përpiluesi rustc ka një sistem të stabilizuar të bazuar në LLVM për gjenerimin e të dhënave të mbulimit të përdorura për të vlerësuar mbulimin e kodit gjatë testimit. Për të aktivizuar të dhënat e mbulimit gjatë montimit, duhet të përdorni flamurin "-Cinstrument-coverage", për shembull, duke e nisur montimin me komandën "RUSTFLAGS="-C instrument-coverage" cargo build". Pas ekzekutimit të skedarit të ekzekutueshëm të kompiluar në këtë mënyrë, skedari default.profraw do të ruhet në direktorinë aktuale, për përpunimin e të cilit mund të përdorni programin llvm-profdata nga komponenti llvm-tools-preview. Prodhimi i përpunuar nga llvm-profdata më pas mund t'i kalohet llvm-cov për të gjeneruar një raport të mbulimit të kodit të shënuar. Informacioni në lidhje me lidhjen me kodin burim është marrë nga skedari i ekzekutueshëm që po ekzaminohet, i cili përfshin të dhënat e nevojshme për lidhjen midis numëruesve të mbulimit dhe kodit. 1| 1|fn main() { 2| 1| println!("Përshëndetje, botë!"); 3| 1|}
  • Në menaxherin e paketës së ngarkesave, mbështetja për flamurin "-timings" është stabilizuar, i cili përfshin gjenerimin e një raporti të detajuar mbi ecurinë e ndërtimit dhe kohën e ekzekutimit të çdo hapi. Raporti mund të jetë i dobishëm për optimizimin e performancës së procesit të montimit.
  • Menaxheri i paketës së ngarkesave ofron një sintaksë të re për mekanizmin e përpilimit të kushtëzuar dhe përzgjedhjes së varësive opsionale, të konfiguruar në skedarin Cargo.toml duke renditur një listë të pronave të emërtuara në seksionin [features] dhe aktivizuar duke aktivizuar vetitë gjatë ndërtimit të paketës duke përdorur flamurin "--features". Versioni i ri shton mbështetje për varësitë në hapësira të veçanta emrash dhe varësi të dobëta.

    Në rastin e parë, është e mundur që të përdoren elementë me parashtesën "dep:" brenda seksionit "[veçoritë]" për t'u lidhur në mënyrë eksplicite me një varësi opsionale pa e përfaqësuar në mënyrë implicite këtë varësi si një veçori. Në rastin e dytë, është shtuar mbështetja për shënimin me shenjën "?". ("emri i paketës?/emri i veçorisë") varësi opsionale që duhet të përfshihen vetëm nëse ndonjë veçori tjetër përfshin varësinë e dhënë opsionale. Për shembull, në shembullin më poshtë, aktivizimi i vetive serde do të mundësojë varësinë "serde", si dhe veçorinë "serde" për varësinë "rgb", por vetëm nëse varësia "rgb" është aktivizuar diku tjetër: [varësi] serde = {version = " 1.0.133", opsionale = e vërtetë } rgb = {version = "0.8.25", opsionale = e vërtetë } [veçoritë] serde = ["dep:serde", "rgb?/serde"]

  • Mbështetja për përpilimin në rritje, e cila ishte çaktivizuar në versionin e fundit, është kthyer. Defekti i përpiluesit që shkaktoi çaktivizimin e veçorisë është zgjidhur.
  • Zgjidhur disa probleme me sigurimin e kohëmatësve të menjëhershëm me një garanci për kohën monotonike, e cila merr parasysh kohën e kaluar nga sistemi në modalitetin e fjetjes. Më parë, OS API përdorej kurdoherë që ishte e mundur për të operuar kohëmatësin, i cili nuk merrte parasysh situatat problematike që thyejnë monotoninë e kohës, si problemet e harduerit, përdorimi i virtualizimit ose gabimet në sistemin operativ.
  • Një pjesë e re e API-së është zhvendosur në kategorinë e qëndrueshme, duke përfshirë metodat dhe implementimet e tipareve janë stabilizuar:
    • Arc::new_ciklik
    • Rc::new_ciklik
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::kapaciteti_këmbimi_mut
    • NdoshtaUninit::assume_init_drop
    • NdoshtaUninit::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
    • përdor::abs_diff
    • Shfaq për io::ErrorKind
    • Nga për ExitCode
    • Jo për ! (shtypni "kurrë")
    • _Op_Cakto<$t>
    • arch::is_aarch64_feature_detected!
  • Niveli i tretë i mbështetjes është zbatuar për platformat mips64-openwrt-linux-musl* dhe armv7-unknown-linux-uclibceabi (softfloat). Niveli i tretë përfshin mbështetjen bazë, por pa testim të automatizuar, publikim të ndërtimeve zyrtare ose kontrollim nëse kodi mund të ndërtohet.
  • Përpiluesi është ndërruar për të përdorur LLVM 14.

Për më tepër, mund të vini re:

  • Mbështetje e shtuar për bootstrapping përpiluesin rustc duke përdorur prapavijën rustc_codegen_gcc, e cila ju lejon të përdorni bibliotekën libgccjit nga projekti GCC si një gjenerues kodi në rustc, i cili lejon rustc të ofrojë mbështetje për arkitekturat dhe optimizimet e disponueshme në GCC. Promovimi i përpiluesit nënkupton aftësinë për të përdorur një gjenerator kodi të bazuar në GCC në rustc për të ndërtuar vetë përpiluesin rustc. Nga ana praktike, kjo veçori ju lejon të ndërtoni programe rust për arkitekturat që nuk ishin mbështetur më parë në rustc.
  • Është i disponueshëm lëshimi i paketës së veglave uutils coreutils 0.0.13, brenda së cilës po zhvillohet një analog i paketës GNU Coreutils, i rishkruar në gjuhën Rust. Coreutils vjen me mbi njëqind shërbime, duke përfshirë sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln dhe ls. Qëllimi i projektit është të krijojë një zbatim alternativ ndër-platformë të Coreutils, i aftë për të ekzekutuar në platformat Windows, Redox dhe Fuchsia, si dhe shpërndarje nën licencën lejuese MIT, në vend të licencës GPL copyleft.

    Versioni i ri ka përmirësuar implementimet e shumë shërbimeve, duke përfshirë përmirësimin e dukshëm të përputhshmërisë së shërbimeve cp, dd, df, split dhe tr me homologët e tyre nga projekti GNU. Dokumentacioni i ofruar në internet. Analisti i duartrokitjes përdoret për të analizuar argumentet e linjës së komandës, i cili ka përmirësuar daljen për flamurin "--help" dhe ka shtuar mbështetje për shkurtesat e komandave të gjata (për shembull, mund të specifikoni "ls -col" në vend të "ls -color ”).

Burimi: opennet.ru

Shto një koment