Kutulutsidwa kwa chilankhulo cha pulogalamu ya Rust 1.59 mothandizidwa ndi zoyika pamisonkhano

Chilankhulo chothandizira anthu ambiri Rust 1.59, chomwe chinakhazikitsidwa ndi polojekiti ya Mozilla koma tsopano chapangidwa mothandizidwa ndi bungwe lodziyimira pawokha lopanda phindu la Rust Foundation, chatulutsidwa. Chilankhulochi chimayang'ana kwambiri pachitetezo cha kukumbukira ndipo chimapereka njira zopezera kufananiza kwakukulu kwa ntchito ndikupewa kugwiritsa ntchito chotolera zinyalala ndi nthawi yothamanga (nthawi yothamanga imachepetsedwa kuti ikhale yoyambira ndikukonza laibulale yokhazikika).

Njira zogwiritsira ntchito kukumbukira za Rust zimapulumutsa wopanga ku zolakwika pamene akuwongolera zolozera ndikuteteza ku zovuta zomwe zimadza chifukwa cha kukumbukira kwapang'onopang'ono, monga kupeza malo okumbukira atamasulidwa, kuchotsa zolozera zopanda pake, ma buffer overruns, etc. Kugawira malaibulale, kupereka zomanga ndi kusamalira zodalira, pulojekitiyi imapanga woyang'anira phukusi la Cargo. Malo osungiramo crates.io amathandizidwa kuti azisunga malaibulale.

Kutetezedwa kwa Memory kumaperekedwa mu Rust panthawi yophatikiza kudzera pakuwunika, kuyang'anira umwini wa chinthu, kuyang'anira nthawi ya moyo wa chinthu (ma scopes), ndikuwunika kulondola kwa kukumbukira kukumbukira panthawi yopanga ma code. Dzimbiri limaperekanso chitetezo ku kusefukira kwazinthu zonse, kumafuna kukhazikitsidwa kovomerezeka kwa zinthu zosinthika musanagwiritse ntchito, kuwongolera zolakwika bwino mulaibulale yokhazikika, kumagwiritsa ntchito lingaliro la maumboni osasinthika ndi zosintha mwachisawawa, kumapereka zilembo zolimba kuti muchepetse zolakwika zomveka.

Zatsopano zazikulu:

  • Ndizotheka kugwiritsa ntchito zoyikapo chilankhulo cha msonkhano, zomwe zimafunidwa pamapulogalamu omwe amafunikira kuwongolera kuphedwa pamlingo wotsika kapena kugwiritsa ntchito malangizo apadera pamakina. Zoyika pamisonkhano zimawonjezeredwa pogwiritsa ntchito macros "asm!" ndi "global_asm!" pogwiritsa ntchito kalembedwe ka zingwe pakutchula mayina ofanana ndi omwe amagwiritsidwa ntchito posinthira zingwe mu Rust. Wopangayo amathandizira malangizo apamsonkhano a x86, x86-64, ARM, AArch64 ndi RISC-V zomangamanga. Chitsanzo cholowetsa: gwiritsani ntchito std::arch::asm; // Chulukitsani x ndi 6 pogwiritsa ntchito masinthidwe ndikuwonjezera let mut x: u64 = 4; zosatetezeka {asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "onjezani {x}, {tmp}}", x = inout(reg ) x, tmp = kunja(reg) _, ); } assert_eq!(x, 4 * 6);
  • Thandizo lowonjezera la magawo owonongeka (ofanana), momwe machitidwe angapo, magawo kapena mapangidwe amatchulidwa kumanzere kwa mawuwo. Mwachitsanzo: tiyeni (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Mapangidwe {e, .. } = Mapangidwe {e: 5, f: 3}; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • Kutha kufotokoza zokhazikika za const generics kwaperekedwa: struct ArrayStorage { arr: [T; N],} mpl ArrayStorage {fn watsopano (a: T, b: T) -> ArrayStorage {ArrayStorage {arr: [a, b],}}}}
  • Woyang'anira phukusi la Cargo amapereka machenjezo okhudza kugwiritsa ntchito zinyumba zosavomerezeka pazodalira zomwe zimakonzedwa chifukwa cha zolakwika zomwe mumaphatikiza (mwachitsanzo, chifukwa cha zolakwika, minda yazinthu zodzaza zidaloledwa kubwerekedwa muzitsulo zotetezeka). Zomanga zoterezi sizidzathandizidwanso mu mtundu wamtsogolo wa Rust.
  • Cargo ndi rustc ali ndi luso lopanga kupanga mafayilo omwe amatha kuchotsedwa (strip = "debuginfo") ndi zizindikiro (strip = "symbols"), popanda kufunikira kuyitanitsa ntchito yapadera. Kuyeretsa kumayendetsedwa ndi "strip" parameter mu Cargo.toml: [profile.release] strip = "debuginfo", "symbols"
  • Kuphatikiza kowonjezera kumayimitsidwa mwachisawawa. Chifukwa chake akuti ndi ntchito kwakanthawi kochepa kwa cholakwika mu compiler yomwe imatsogolera ku kuwonongeka ndi zolakwika za deserialization. Kukonza zolakwika kwakonzedwa kale ndipo kudzaphatikizidwa mu kutulutsidwa kotsatira. Kuti mubwezeretse kuphatikizika kowonjezera, mutha kugwiritsa ntchito kusintha kwachilengedwe RUSTC_FORCE_INCREMENTAL=1.
  • Gawo latsopano la API lasunthidwa ku gulu lokhazikika, kuphatikiza njira ndi kukhazikitsidwa kwa machitidwe akhazikika:
    • std::thread::available_parallelism
    • Zotsatira::kopedwa
    • Zotsatira::cloned
    • uwu ::asm!
    • arch::global_asm!
    • ops::ControlFlow::ndi_break
    • ops::ControlFlow::is_continue
    • TryFrom kwa u8
    • char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Error)
    • izi::zip
    • NonZeroU8::ndi_mphamvu_ya_awiri
    • NonZeroU16::ndi_mphamvu_ya_awiri
    • NonZeroU32::ndi_mphamvu_ya_awiri
    • NonZeroU64::ndi_mphamvu_ya_awiri
    • NonZeroU128::ndi_mphamvu_ya_awiri
    • DoubleEndedIterator ya ToLowercase kapangidwe
    • DoubleEndedIterator pamapangidwe a ToUppercase
    • TryFrom<&mut [T]> ya [T; N]
    • UnwindSafe for the Once structure
    • RefUnwindSafe Kwa Kamodzi
    • ntchito zothandizira armv8 neon zomangidwa mu compiler ya aarch64
  • Lingaliro la "const", lomwe limatsimikizira kuthekera kogwiritsa ntchito mwanjira iliyonse m'malo mwa zokhazikika, limagwiritsidwa ntchito muzochita:
    • mem::MwinaUninit::as_ptr
    • mem::MwinaUninit::ganize_init
    • mem::MwinaUninit::kuganiza_init_ref
    • ffi::CStr::from_bytes_with_nul_unchecked

Source: opennet.ru

Kuwonjezera ndemanga