Programmeerimiskeele Rust 1.60 väljaanne

Avaldatud on üldotstarbelise programmeerimiskeele Rust 1.60 uus väljalase, mille arendamine algas Mozilla projekti all, kuid mis on nüüd tõstatatud sõltumatu mittetulundusühingu Rust Foundationi toetusel. Keel keskendub mälu ohutule kasutamisele ja pakub vahendeid ülesannete kõrge paralleelsuse saavutamiseks, vältides samas prügikoguja ja runtime'i (runtime piirdub põhialgatamise ja standardraamatukogu hooldamisega).

Rustis olevad mäluhaldusmeetodid vabastavad arendajad probleemidest, mis on seotud osutitega, ning kaitsevad madala taseme mälutöötlusest tulenevate probleemide, nagu vabanenud mälu alale juurdepääs, nullosutite de-referentseerimine, mälupiiride ületamine jne. Raamatukogude levitamiseks, projekti koostamise ja sõltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude paigutamiseks toetatakse repo crates.io.

Rust tagab turvalise mälutöötluse kompilatsiooni ajal, kontrollides viiteid, jälgides objektide omandit, arvestades objektide elutsüklit (nähtavust) ja hinnates mälule juurdepääsu õigsust koodi käitamise ajal. Rust pakub ka meetmeid enamike täisarvude ületamiste vältimiseks, nõuab muutujate väärtuste algväärtustamist enne kasutamist, käsitleb vigasid paremini oma standardraamatukogus, rakendab immutamatuse (immutable) kontseptsiooni viidetes ja muutujates vaikimisi ning pakub tugevat staatilist tüüpimist loogiliste vigade minimeerimiseks.

Põhilised uuendused:

  • Rustc kompilaatoris on stabiliseeritud LLVM-põhine süsteem katvuseandmete genereerimiseks, mida kasutatakse koodi katvuse hindamiseks testimise ajal. Katvuseandmete aktiveerimiseks kogumise ajal tuleb kasutada lippu "-Cinstrument-coverage", näiteks käivitades kogumise käsuga "RUSTFLAGS="-C instrument-coverage" cargo build". Pärast sel viisil kompileeritud täideti faili käivitamist salvestatakse praeguses kataloogis fail default.profraw, mille töötlemiseks saab kasutada tööriista llvm-profdata, mis on osa llvm-tools-preview paketist. Töötlustööriista llvm-profdata väljundit saab edasi anda programmile llvm-cov, et genereerida annotatsioonidega aruanne koodi katvuse kohta. Teave seose kohta lähtekoodiga võetakse uuritavast täidetud failist, kuhu on kaasatud vajalikud andmed katvuse loendurite seostamiseks koodiga.
  • Pakettide haldajas cargo on stabiliseeritud lipu "--timings" toe, mis hõlmab detailse aruande koostamist kogumise käigu ja iga sammu täitmise aja kohta. Aruanne võib olla kasulik kogumisprotsessi jõudluse optimeerimiseks.
  • Paketihalduri cargo on soovitatud uus süntaks tingimuslikuks kompileerimiseks ja valikuliseks sõltuvuseks, mida saab seadistada failis Cargo.toml, loetledes nimetatud omadusi ja [features] sektsiooni, ning aktiveerida sõltuvuste lisamise ajal paketi ehitamisel lipuga "—features". Uues versioonis on lisatud tuge eraldi nimede ruumide ja nõrkade (weak) sõltuvuste jaoks.

    Esimeses variandis on realiseeritud võimalus kasutada sektsioonis «[features]» elemente, millel on eelmine «dep:», et selgelt siduda valikuline sõltuvus ilma selle sõltuvuse varjatud esitamise kui omaduse (feature) kujul. Teises variandis on lisatud toe tähistamisega «?» («package-name?/feature-name») valikulistele sõltuvustele, mis tuleks lisada ainult siis, kui mõni muu omadus hõlmab antud valikulist sõltuvust. Näiteks allolevas näites suurendab omaduse serde lülitamine sõltuvuse «serde» ja sõltuvuse «rgb» omaduse «serde» lisamist, kuid ainult juhul, kui kuskil mujal on hõlmatud sõltuvus «rgb»: [dependencies] serde = { version = «1.0.133», optional = true } rgb = { version = «0.8.25», optional = true } [features] serde = [«dep:serde», «rgb?/serde»]

  • Eelnevalt välja lülitatud inkrementaalse kompileerimise tugi on taastatud. Kompilaatori viga, mis viis funktsiooni välja lülitamiseni, on kõrvaldatud.
  • Mõned probleemid Instant taimeritele monotoonse ajakalkulatsiooniga on lahendatud, arvestades süsteemi unerežiimis veedetud aega. Varasemalt kasutati taimeri tööks OS API-d, mis ei arvestanud probleeme, mis rikuvad aja monotoonsust, nagu riistvaraprobleemid, virtualiseerimise rakendamine või operatsioonisüsteemi vead.
  • Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • slice::EscapeAscii
    • ::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
    • usize::abs_diff
    • Display io::ErrorKind jaoks
    • From ExitCode jaoks
    • Not ! (tüüp „never”)
    • _Op_Assign
    • arch::is_aarch64_feature_detected!
  • Kolmas taseme toetus on rakendatud mips64-openwrt-linux-musl* ja armv7-unknown-linux-uclibceabi (softfloat) platvormide jaoks. Kolmas tase hõlmab põhitoetust, kuid ilma automatiseeritud testimise, ametlike väljalasete avaldamise ja koodi koostamise võimaluse kontrollimiseta.
  • Kompilaator on üle viidud LLVM 14 kasutamisele.

Samuti tuleks märkida:

  • Lisatud on rustc kompilaatori vähendamise (bootstrapping) tugi rustc_codegen_gcc tahvli kaudu, mis võimaldab kasutada GCC projektist pärinevat libgccjit raamatukogu koodigeneraatorina rustc-s. See tagab rustc-s toega GCC-s saadaval olevaid arhitektuure ja optimeerimisi. Kompilaatori vähendamine viitab võimalusele kasutada rustc-s GCC-põhist koodigeneraatorit rustc enda kokkupanemiseks. Praktikas tähendab see võimalike rust-programmide koostamist arhitektuuride jaoks, mida rustc eelnevalt ei toetanud.
  • Välja on antud uutils coreutils 0.0.13 tarkvara, mis arendab GNU Coreutils paketi analooge, mis on ümber kirjutatud Rusti keeles. coreutils sisaldab üle saja tööriista, sealhulgas sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln ja ls. Projekti eesmärgiks on luua platvormideülene alternatiivne rakendus Coreutils, mis suudab töötada ka Windowsi, Redoxi ja Fuchsia platvormidel ning levitada seda MIT-i lubade alusel, mitte GPL-i kopilehise litsentsi alusel.

    Uues versioonis on parandatud paljude utiliitide rakendust, sealhulgas on oluliselt paranenud cp, dd, df, split ja tr utiliitide ühilduvus GNU projektiga. On esitatud online-dokumentatsioon. Käskude ridade argumentide parsimiseks on kasutatud clap parserit, mis on parandanud «—help» lipu väljundit ja lisanud toetuse pikkade käskude lühenditele (näiteks saab kasutada «ls —col» asemel «ls —color»).

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster