Išleista programavimo kalba Rust 1.59 su asemblerio įdėklų palaikymu

Paskelbtas „Mozilla“ projekto įkurtos, bet dabar globojamos nepriklausomos ne pelno organizacijos „Rust Foundation“ bendrosios paskirties programavimo kalbos „Rust 1.59“ leidimas. Kalba daugiausia dėmesio skiria atminties saugai ir suteikia galimybę pasiekti aukštą darbo lygiagretumą, vengiant šiukšlių rinktuvo ir vykdymo laiko (vykdymo laikas sumažinamas iki pagrindinės standartinės bibliotekos inicijavimo ir priežiūros).

„Rust“ atminties apdorojimo metodai apsaugo kūrėją nuo klaidų manipuliuojant rodyklėmis ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties tvarkymo, pvz., prieiga prie atminties srities ją atlaisvinus, nulinių rodyklių panaikinimas, buferio viršijimas ir kt. Siekiant platinti bibliotekas, teikti kūrimo ir valdyti priklausomybes, projektas sukuria krovinių paketų tvarkyklę. Crates.io saugykla palaikoma bibliotekų prieglobai.

Atminties sauga „Rust“ užtikrinama kompiliavimo metu, tikrinant nuorodas, stebint objekto nuosavybę, stebint objektų gyvavimo trukmę (apimtį) ir įvertinant prieigos prie atminties teisingumą vykdant kodą. Rust taip pat suteikia apsaugą nuo sveikųjų skaičių perpildymo, reikalauja, kad kintamieji būtų inicijuojami prieš naudojant, geriau tvarko klaidas standartinėje bibliotekoje, pagal numatytuosius nustatymus taiko nekintamų nuorodų ir kintamųjų koncepciją ir siūlo tvirtą statinį rašymą, kad būtų sumažintos loginės klaidos.

Pagrindinės naujovės:

  • Galima naudoti asamblėjos kalbos intarpus, kurie yra paklausūs programose, kurioms reikia žemo lygio vykdymo kontrolės arba gali būti naudojamos specializuotos mašinos instrukcijos. Surinkimo įdėklai pridedami naudojant makrokomandas "asm!" ir "global_asm!" naudojant eilučių formatavimo sintaksę registrams pavadinti, panašiai į naudojamą eilučių keitimui programoje Rust. Kompiliatorius palaiko x86, x86-64, ARM, AArch64 ir RISC-V architektūrų surinkimo instrukcijas. Įterpimo pavyzdys: naudokite std::arch::asm; // Padauginkite x iš 6 naudodami poslinkius ir sudėkite tegul mut x: u64 = 4; nesaugus {asm!("mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg ) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
  • Pridėtas destruktūruotų (lygiagrečių) priskyrimų palaikymas, kai kairėje išraiškos pusėje nurodomi keli bruožai, pjūviai ar struktūros. Pavyzdžiui: tegul (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struktūra { e, .. } = Struktūra { e: 5, f: 3}; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • Suteikta galimybė nurodyti numatytąsias const generics vertes: struct ArrayStorage { arr: [T; N], } impl ArrayStorage { fn new(a: T, b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } } }
  • Cargo paketų tvarkytuvė pateikia įspėjimus apie netinkamų struktūrų naudojimą priklausomybėse, kurios apdorojamos dėl kompiliatoriaus klaidų (pavyzdžiui, dėl klaidos supakuotų struktūrų laukus buvo leista skolintis saugiuose blokuose). Tokios konstrukcijos nebebus palaikomos būsimoje Rust versijoje.
  • „Cargo“ ir „rustc“ turi integruotą galimybę generuoti vykdomuosius failus, kuriuose nėra derinimo duomenų (juostelė = "debuginfo") ir simbolių (juostelė = "simboliai"), nereikia iškviesti atskiros programos. Valymo nustatymas įgyvendinamas naudojant Cargo.toml parametrą „juostelė“: [profile.release] strip = „debuginfo“, „simboliai“
  • Laipsniškas kompiliavimas pagal numatytuosius nustatymus yra išjungtas. Teigiama, kad priežastis yra laikinas kompiliatoriaus klaidos sprendimas, dėl kurio atsiranda strigčių ir deserializavimo klaidų. Klaidos pataisymas jau buvo paruoštas ir bus įtrauktas į kitą leidimą. Norėdami grąžinti laipsnišką kompiliavimą, galite naudoti aplinkos kintamąjį RUSTC_FORCE_INCREMENTAL=1.
  • Nauja API dalis buvo perkelta į stabiliųjų kategoriją, įskaitant stabilizuotus bruožų metodus ir įgyvendinimą:
    • std::thread::available_parallelism
    • Rezultatas::kopijuotas
    • Rezultatas::klonuotas
    • arch::asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • TryFrom už u8
    • char::TryFromCharError (klonavimas, derinimas, rodymas, dalinis lygis, kopijavimas, lygtis, klaida)
    • iter::zip
    • NonZeroU8::yra_power_of_wo
    • NonZeroU16::yra_power_of_wo
    • NonZeroU32::yra_power_of_wo
    • NonZeroU64::yra_power_of_wo
    • NonZeroU128::yra_power_of_wo
    • „DoubleEndedIterator“, skirta mažųjų raidžių struktūrai
    • DoubleEndedIterator, skirta ToUppercase struktūrai
    • TryFrom<&mut [T]> [T; N]
    • UnwindSafe for the Once
    • RefUnwindSafe vieną kartą
    • armv8 neon palaikymo funkcijos, integruotos į aarch64 kompiliatorių
  • Atributas "const", kuris nustato galimybę jį naudoti bet kuriame kontekste vietoj konstantų, naudojamas funkcijose:
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUninit::sume_init
    • mem::MaybeUninit::sume_init_ref
    • ffi::CStr::from_bytes_with_nul_unchecked

Šaltinis: opennet.ru

Pirkite patikimą prieglobą svetainėms su DDoS apsauga, VPS VDS serveriais 🔥 Įsigykite patikimą svetainių talpinimą su DDoS apsauga, VPS VDS serveriais | ProHoster