Útgáfa af Rust 1.59 forritunarmálinu með stuðningi fyrir samsetningarinnskot

Útgáfa Rust 1.59 almennt forritunarmálsins, stofnað af Mozilla verkefninu, en nú þróað undir merkjum óháðu sjálfseignarstofnunarinnar Rust Foundation, hefur verið gefin út. Tungumálið leggur áherslu á minnisöryggi og veitir leiðina til að ná mikilli samhliða vinnu á sama tíma og forðast notkun á sorphirðu og keyrslutíma (keyrslutími minnkar í grunnuppsetningu og viðhald á venjulegu bókasafni).

Minni meðhöndlunaraðferðir Rust bjarga þróunaraðilanum frá villum við meðhöndlun ábendinga og vernda gegn vandamálum sem koma upp vegna minnis meðhöndlunar á lágu stigi, eins og aðgangur að minnissvæði eftir að það hefur verið losað, frávísun núllbenda, offramkeyrsla á biðminni o.s.frv. Til að dreifa bókasöfnum, útvega smíði og stjórna ósjálfstæði, þróar verkefnið farmpakkastjórann. Crates.io geymslan er studd til að hýsa bókasöfn.

Minni öryggi er veitt í Rust á þýðingu tíma með tilvísun athugun, halda utan um eignarhald hlut, halda utan um líftíma hlut (umfang) og meta réttmæti minni aðgangs meðan kóða er keyrt. Ryð veitir einnig vernd gegn heiltöluflæði, krefst skyldubundinnar frumstillingar breytugilda fyrir notkun, meðhöndlar villur betur í stöðluðu bókasafni, beitir hugmyndinni um óbreytanlegar tilvísanir og breytur sjálfgefið, býður upp á sterka truflanir innsláttar til að lágmarka rökfræðilegar villur.

Helstu nýjungar:

  • Hægt er að nota samsetningarmálinnskot, sem eru eftirsótt í forritum sem þurfa að stjórna framkvæmd á lágu stigi eða geta notað sérhæfðar vélaleiðbeiningar. Samsetningarinnskotum er bætt við með því að nota fjölva "asm!" og "global_asm!" nota setningafræði strengjasniðs til að nefna skrár svipað því sem er notað fyrir strengjaskipti í Rust. Þjálfarinn styður samsetningarleiðbeiningar fyrir x86, x86-64, ARM, AArch64 og RISC-V arkitektúr. Innsetningardæmi: notaðu std::arch::asm; // Margfaldaðu x með 6 með vöktum og bætir við let mut x: u64 = 4; óörugg { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "bæta við {x}, {tmp}", x = inout(reg. ) x, tmp = út(reg) _, ); } assert_eq!(x, 4 * 6);
  • Bætt við stuðningi fyrir afskipt (samsíða) verkefni, þar sem nokkrir eiginleikar, sneiðar eða strúktúrar eru tilgreindir vinstra megin við tjáninguna. Til dæmis: láta (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • Möguleikinn á að tilgreina sjálfgefin gildi fyrir const almenna fræði hefur verið veitt: struct ArrayStorage { arr: [T; N], } viðb ArrayStorage { fn new(a: T, b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } } }
  • Umsjónarmaður farmpakka veitir viðvaranir um notkun ógildra mannvirkja í ósjálfstæðum sem eru unnin vegna villna í þýðanda (til dæmis, vegna villu, var leyfilegt að fá reitir pakkaðra mannvirkja að láni í öruggum blokkum). Slíkar byggingar verða ekki lengur studdar í framtíðarútgáfu af Rust.
  • Cargo og rustc hafa innbyggða getu til að búa til keyrsluskrár sem eru fjarlægðar villuleitargögnum (strip = „debuginfo“) og táknum (strip = „symbols“), án þess að þurfa að hringja í sérstakt tól. Hreinsunarstillingin er útfærð í gegnum „strip“ færibreytuna í Cargo.toml: [profile.release] strip = „debuginfo“, „symbols“
  • Stigvaxandi samantekt er sjálfgefið óvirk. Ástæðan er sögð vera tímabundin lausn fyrir villu í þýðandanum sem leiðir til hruns og villu í raðgreiningu. Villuleiðrétting hefur þegar verið undirbúin og verður innifalin í næstu útgáfu. Til að skila stigvaxandi samantekt geturðu notað umhverfisbreytuna RUSTC_FORCE_INCREMENTAL=1.
  • Nýr hluti af API hefur verið færður í flokkinn stöðugt, þar með talið aðferðir og útfærslur á eiginleikum hafa verið stöðugar:
    • std::thread::available_parallelism
    • Niðurstaða::afrituð
    • Niðurstaða::klónuð
    • arch::asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • PrófaðuFrom fyrir u8
    • char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Error)
    • iter::zip
    • NonZeroU8::er_power_of_two
    • NonZeroU16::er_power_of_two
    • NonZeroU32::er_power_of_two
    • NonZeroU64::er_power_of_two
    • NonZeroU128::er_power_of_two
    • DoubleEndedIterator fyrir Tolowercase uppbyggingu
    • DoubleEndedIterator fyrir ToUppercase uppbyggingu
    • PrófaðuFrom<&mut [T]> fyrir [T; N]
    • UnwindSafe for the Once uppbyggingu
    • RefUnwindSafe í eitt skipti
    • armv8 neon stuðningsaðgerðir innbyggðar í þýðanda fyrir aarch64
  • "const" eigindin, sem ákvarðar möguleikann á að nota hann í hvaða samhengi sem er í stað fasta, er notaður í föllum:
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUninit::assume_init
    • mem::MaybeUninit::assume_init_ref
    • ffi::CSr::from_bytes_with_nul_unchecked

Heimild: opennet.ru

Bæta við athugasemd