Rust 1.60 programmeerimiskeele väljalase

Avaldatud on Mozilla projektiga rajatud, kuid nüüdseks sõltumatu mittetulundusühingu Rust Foundation egiidi all välja töötatud üldotstarbelise programmeerimiskeele Rust 1.60 väljalase. Keel keskendub mälu ohutusele ja pakub vahendeid töö kõrge paralleelsuse saavutamiseks, vältides samal ajal prügikoguja ja käitusaja kasutamist (käitusaeg lüheneb standardse teegi põhikäivitamise ja hoolduseni).

Rusti mälukäsitlusmeetodid säästavad arendajat osutitega manipuleerimisel esinevate vigade eest ja kaitsevad madala tasemega mälukäsitluse tõttu tekkivate probleemide eest, nagu mälualale juurdepääs pärast selle vabastamist, nullviidate viitamise tühistamine, puhvri ülekoormus jne. Teekide levitamiseks, järkude pakkumiseks ja sõltuvuste haldamiseks arendab projekt Cargo paketihaldurit. Hoidlat crates.io toetatakse teekide majutamiseks.

Mälu turvalisus on Rustis kompileerimise ajal tagatud viidete kontrollimise, objekti omandiõiguse jälgimise, objektide eluea (ulatuse) jälgimise ja mälule juurdepääsu õigsuse hindamise kaudu koodi täitmise ajal. Rooste pakub ka kaitset täisarvude ületäitumise eest, nõuab muutujate väärtuste kohustuslikku lähtestamist enne kasutamist, käsitleb standardteegi vigu paremini, rakendab vaikimisi muutumatute viidete ja muutujate kontseptsiooni, pakub tugevat staatilist tippimist loogiliste vigade minimeerimiseks.

Peamised uuendused:

  • Rustc-kompilaatoril on stabiliseeritud LLVM-põhine süsteem katvuse andmete genereerimiseks, mida kasutatakse testimise ajal koodi katvuse hindamiseks. Katvusandmete lubamiseks kokkupaneku ajal peate kasutama lippu “-Cinstrument-coverage”, näiteks alustades koostu käsuga “RUSTFLAGS=”-C instrument-coverage” cargo build”. Pärast sel viisil koostatud käivitatava faili käivitamist salvestatakse fail default.profraw aktiivsesse kataloogi, mille töötlemiseks saate kasutada utiliiti llvm-profdata komponendist llvm-tools-preview. Llvm-profdata poolt töödeldud väljundi saab seejärel edastada llvm-covile, et luua märkustega koodi katvuse aruanne. Info lähtekoodi lingi kohta võetakse uuritavast käivitatavast failist, mis sisaldab vajalikke andmeid leviala loendurite ja koodi vahelise seose kohta. 1| 1|fn main() { 2| 1| println!("Tere, maailm!"); 3| 1|}
  • Kaubapaketi halduris on stabiliseerunud lipu "-ajastused" tugi, mis hõlmab üksikasjaliku aruande genereerimist ehitamise edenemise ja iga sammu täitmise aja kohta. Aruanne võib olla kasulik koosteprotsessi toimivuse optimeerimiseks.
  • Kaubapaketihaldur pakub tingimusliku kompileerimise ja valikuliste sõltuvuste valimise mehhanismi jaoks uut süntaksit, mis on konfigureeritud failis Cargo.toml, loetledes jaotises [funktsioonid] nimeliste atribuutide loendi ja mis aktiveeritakse, lubades atribuudid paketi ehitamise ajal. kasutades lippu "--funktsioonid". Uus versioon lisab toe sõltuvustele eraldi nimeruumides ja nõrkadele sõltuvustele.

    Esimesel juhul on võimalik jaotises „[funktsioonid]” kasutada elemente eesliitega „dep:”, et siduda selgesõnaliselt valikulise sõltuvusega, ilma seda sõltuvust funktsioonina kaudselt esindamata. Teisel juhul on lisatud “?” märgiga märgistamise tugi. ("paketi nimi?/funktsiooni nimi") valikulised sõltuvused, mis tuleks kaasata ainult siis, kui mõni muu atribuut sisaldab antud valikulist sõltuvust. Näiteks allolevas näites lubab atribuudi serde lubamine sõltuvuse "serde" ja ka "rgb" sõltuvuse atribuudi "serde", kuid ainult siis, kui sõltuvus "rgb" on mujal lubatud: [dependencies] serde = { versioon = " 1.0.133", valikuline = tõene } rgb = { versioon = "0.8.25", valikuline = tõene } [funktsioonid] serde = ["dep:serde", "rgb?/serde"]

  • Viimases versioonis keelatud astmelise kompileerimise tugi on tagastatud. Kompilaatori viga, mis põhjustas funktsiooni keelamise, on lahendatud.
  • Lahendatud on mõned probleemid, mis on seotud kiirtaimerite monotoonse ajastuse garantiiga, mis võtab arvesse süsteemi puhkerežiimis veedetud aega. Varem kasutati taimeriga töötamiseks võimalusel OS API-t, mis ei võtnud arvesse aja monotoonsust rikkuvaid probleemseid olukordi, nagu riistvaraprobleemid, virtualiseerimise kasutamine või operatsioonisüsteemi vead.
  • API uus osa on viidud stabiilsete kategooriasse, sealhulgas on stabiliseeritud meetodid ja tunnuste rakendused:
    • Arc::uus_tsükliline
    • Rc::uus_tsükliline
    • viil::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vana::varu_mahutavus_mut
    • MaybeUninit::oletame_init_drop
    • MaybeUninit::oletame_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • suurus::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • kasuta::abs_diff
    • Kuva io::ErrorKind jaoks
    • Alates ExitCode'i jaoks
    • Mitte ! (sisestage "mitte kunagi")
    • _Op_Määra<$t>
    • arch::is_aarch64_feature_detected!
  • Kolmas tugitase on rakendatud platvormidele mips64-openwrt-linux-musl* ja armv7-unknown-linux-uclibceabi (softfloat). Kolmas tase hõlmab põhituge, kuid ilma automaatse testimiseta, ametlike järelversioonide avaldamise või koodi loomiseta.
  • Kompilaator on lülitatud kasutama LLVM 14.

Lisaks võite märkida:

  • Lisatud rustc-kompilaatori alglaadimise tugi rustc_codegen_gcc taustaprogrammi abil, mis võimaldab kasutada GCC projekti libgccjit teeki rustc-s koodigeneraatorina, mis võimaldab rustc-l pakkuda tuge GCC-s saadaolevatele arhitektuuridele ja optimeerimistele. Kompilaatori edendamine tähendab võimalust kasutada rustc-s GCC-põhist koodigeneraatorit rustc-kompilaatori enda koostamiseks. Praktilise poole pealt võimaldab see funktsioon ehitada roosteprogramme arhitektuuridele, mida rustc varem ei toetanud.
  • Saadaval on uutils coreutils 0.0.13 tööriistakomplekti väljalase, mille raames arendatakse Rust keelde ümber kirjutatud GNU Coreutilsi paketi analoogi. Coreutilsil on üle saja utiliidi, sealhulgas sort, cat, chmod, chown, chroot, cp, kuupäev, dd, echo, hostname, id, ln ja ls. Projekti eesmärk on luua Coreutilsi platvormideülene alternatiivne juurutus, mis on võimeline töötama Windowsi, Redoxi ja Fuchsia platvormidel ning levitama lubava MIT litsentsi alusel GPL copyleft litsentsi asemel.

    Uus versioon on täiustanud paljude utiliitide rakendusi, sealhulgas oluliselt parandanud cp, dd, df, split ja tr utiliitide ühilduvust GNU projekti kolleegidega. Pakutakse veebipõhiseid dokumente. Clap parserit kasutatakse käsurea argumentide sõelumiseks, mis on parandanud lipu "--help" väljundit ja lisanud pikkade käskude lühendite toe (näiteks saate määrata "ls -col" asemel "ls -col" ”).

Allikas: opennet.ru

Lisa kommentaar