Rust 1.73 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.73 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:

  • Vaikimisi programmi krahhikäsitleja (paanika) väljastatud sõnumite vorming on ümber kujundatud. Makros "paanika!" määratud tekst on nüüd näidatud eraldi real ilma jutumärkideta, muutes sõnumi hõlpsamini loetavaks ja kõrvaldades segaduse, kui pesastatud jutumärgid on olemas või jagatud mitmele reale. fn main() { las fail = "ferris.txt"; paanika!("oh ei! {faili:?} ei leitud!"); } Seal oli lõime "peamine" paanikas "oh ei! "ferris.txt" ei leitud!', src/main.rs:3:5 Lõim 'main' sattus paanikasse aadressil src/main.rs:3:5: oh ei! "ferris.txt" ei leitud!

    Samuti on ümber töötatud makrode assert_eq ja assert_ne käivitamisel kuvatavate teadete väljund. fn main() { assert_eq!("🦀", "🐟", "ferris ei ole kala"); } Lõim 'main' sattus paanikasse 'väide ebaõnnestus: `(vasak == parem)` vasak: `"🦀"`, paremal: `"🐟"`: ferris ei ole kala', src/main.rs: 2 :5 Lõim 'main' sattus paanikasse src/main.rs:2:5: väide `left == right` nurjus: Ferris ei ole kala vasakule: "🦀" paremale: "🐟"

  • Kooskõlas RFC 3184-ga on lisatud võimalus otse keermepõhiste (thread_local) LocalKey salvestusvõtmetega manipuleerida > ja LocalKey > kasutades meetodeid get(), set(), take() ja asenda() selle asemel, et kasutada "with(|inner| ...)" sulgemist, mis välistab vajaduse teha faili jaoks täiendavat lähtestamiskoodi. uute lõimede jaoks määratud vaikeväärtused, kui kasutate makrot "thread_local!" lõime_kohalik! { staatilised ASJAD: Cell > = Lahter::uus(Vec::uus()); } fn f() { // oli ASJAD.with(|i| i.set(vec![32, 1, 2])); // muutus ASJAD.set(vec![3, 1, 2]); // ... // lasti v = ASJAD.with(|i| i.take()); // sai let v: Vec = ASJAD.take(); }
  • API uus osa on viidud stabiilsete kategooriasse, sealhulgas on stabiliseeritud meetodid ja tunnuste rakendused:
    • Signeerimata {integer}::div_ceil
    • Signeerimata {täisarv}::next_multiple_of
    • Signeerimata {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::saada
    • LocalKey:: >::set
    • LocalKey:: >::võta
    • LocalKey:: >::asendada
    • LocalKey:: >::laenamisega
    • LocalKey:: >::with_laena_mut
    • LocalKey:: >::set
    • LocalKey:: >::võta
    • LocalKey:: >::asendada
  • Funktsioonides kasutatakse atribuuti “const”, mis määrab võimaluse kasutada seda konstantide asemel mis tahes kontekstis:
    • rc::Nõrk::uus
    • sünkroonimine::Nõrk::uus
    • NonNull::as_ref
  • Kompilaator salvestab versiooniteabe jaotises ".comment", sarnaselt GCC ja Clangiga.
  • Kolmas tugitase on rakendatud platvormidele aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl ja x86_64-unknown-linux - oho. Kolmas tase hõlmab põhituge, kuid ilma automaatse testimiseta, ametlike järelversioonide avaldamise või koodi loomiseta.
  • Rakendatud on sihtplatvormi wasm32-wasi-preview1-threads teine ​​tugitase. Teise taseme tugi hõlmab montaažigarantii.

Allikas: opennet.ru

Lisa kommentaar