Rust 1.34 Kutulutsa Chilankhulo cha Mapulogalamu

chinachitika kutulutsidwa kwa chilankhulo cha pulogalamu yadongosolo Dzimbiri 1.34, yopangidwa ndi polojekiti ya Mozilla. Chilankhulochi chimayang'ana kwambiri pachitetezo cha kukumbukira, chimapereka kasamalidwe ka kukumbukira, ndipo chimapereka njira zopezera ntchito yofanana kwambiri popanda kugwiritsa ntchito chotolera zinyalala kapena nthawi yothamanga.

Kuwongolera kukumbukira kwa Rust kumamasula wopanga kuti asasokonezedwe ndi pointer ndikutchinjiriza ku zovuta zomwe zimadza chifukwa chakuwongolera kukumbukira kwapang'onopang'ono, monga kulowa kwa kukumbukira kwaulere, kusokoneza null pointer, buffer overruns, ndi zina zotero. Woyang'anira phukusi akupangidwa kuti azigawira malaibulale, kuwonetsetsa kusonkhanitsa ndi kuyang'anira zodalira ndi polojekiti. katundu, kukulolani kuti mupeze malaibulale ofunikira pa pulogalamuyo ndikudina kamodzi. Malo osungiramo mabuku amathandizidwa kuti azisunga malaibulale makate.io.

waukulu zatsopano:

  • Woyang'anira phukusi la Cargo wawonjezera zida zogwirira ntchito ndi zolembera zina zomwe zitha kukhala limodzi ndi kaundula wa anthu wa crates.io. Mwachitsanzo, opanga mapulogalamu a eni tsopano atha kugwiritsa ntchito kaundula wawo wachinsinsi, womwe ungagwiritsidwe ntchito polemba zodalira pa Cargo.toml, ndikugwiritsa ntchito mtundu wosinthira wofanana ndi crates.io pazogulitsa zawo, komanso kuloza zodalira pamabokosi onse awiri. io ndi kaundula wanu.

    Kuti muwonjezere zolembetsa zakunja ku .cargo/config (yomwe ili mu $HOME kapena m'ndandanda wa phukusi)
    kupereka gawo "[registries]", ndi kugwiritsa ntchito kaundula wakunja, njira ya "registry" yawonekera pofotokozera za kudalira kulikonse mu Cargo.toml. Kuti mulumikizane ndi kaundula wowonjezera, ingoikani chizindikiro chotsimikizira mu fayilo ya ~/.cargo/credentials ndikuyendetsa lamulo.
    "cargo login --registry=my-registry" ndikusindikiza phukusi -
    "cargo publish -registry=my-registry";

  • Wowonjezera chithandizo chonse chogwiritsa ntchito "?" mu mayesero aziphunzitso, kukulolani kuti mugwiritse ntchito nambala yachitsanzo kuchokera muzolemba ngati mayesero. Wothandizira kale
    "?" zitha kugwiritsidwa ntchito kuthana ndi zolakwika pakuyesa pokhapokha ngati pali "fn main()" ntchito kapena "#[test]";

  • Muzochita zomwe zimatanthauzidwa pogwiritsa ntchito macros procedural kupereka kutha kugwiritsa ntchito zizindikiro zongoyenderana (“#[attr($tokens)]”, “#[attr[$tokens]] ndi #[attr{$tokens}]”). M'mbuyomu, zinthu zinkangotchulidwa mumtengo/zobwerezabwereza pogwiritsa ntchito zingwe, mwachitsanzo "#[foo(bar, baz(quux, foo = “bar”))]”, koma tsopano ndi zotheka kugwiritsa ntchito mawerengero (' #[range(0. .10)]') ndi zomanga monga “#[bound(T: MyTrait)]”;
  • Mitundu yokhazikika (makhalidwe) TryFrom и TryInto, kulola kutembenuka kwamtundu ndikuwongolera zolakwika. Mwachitsanzo, njira monga kuchokera_be_bytes yokhala ndi mitundu yambiri imagwiritsa ntchito masanjidwe monga zolowetsa, koma deta nthawi zambiri imabwera mumtundu wa Gawo, ndipo kusintha pakati pa magulu ndi magawo kumakhala kovuta kuchita pamanja. Mothandizidwa ndi makhalidwe atsopano, opareshoni yomwe yatchulidwayo ikhoza kuchitidwa pouluka poyimba foni ku .try_into(), mwachitsanzo, "let num = u32::from_be_bytes(slice.try_into()?)". Pa zosintha zomwe zimapambana nthawi zonse (mwachitsanzo, kuchokera ku mtundu u8 kupita ku u32), mtundu wolakwika wawonjezedwa Zosalephera, kulola kugwiritsidwa ntchito mowonekera
    TryFrom pazokhazikitsa zonse zomwe zilipo za "Kuchokera";

  • Ntchito yayimitsidwa CommandExt::before_exec, zomwe zinalola kuti wogwirizira aphedwe asanayendetse exec, yomwe inkachitidwa potsata ndondomeko ya mwana yopangidwa ndi foloko () foni. M'mikhalidwe yotereyi, zida zina zamakolo, monga zofotokozera mafayilo ndi malo okumbukira mapu, zitha kubwerezedwa, zomwe zitha kubweretsa machitidwe osadziwika bwino komanso kugwiritsa ntchito molakwika malaibulale.
    Ndikofunikira kugwiritsa ntchito ntchito yosatetezeka m'malo mwa before_exec CommandExt::pre_exec.

  • Mitundu ya atomiki yokhazikika yosayinidwa komanso yosasainidwa kuyambira pa 8 mpaka 64 bits (mwachitsanzo, AtomicU8), komanso mitundu yosainidwa NonZeroI[8|16|32|64|128].
  • Gawo latsopano la API lasunthidwa kugawo lokhazikika, kuphatikiza Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub. ] ndi njira za SystemTime zakhazikika ::checked_[add|sub]. The iter::from_fn ndi iter::olowa m'malo ntchito zakhazikika;
  • Pa mitundu yonse ya chiwerengero, njira za checked_pow, saturating_pow, wrapping_pow ndi overflowing_pow zimayendetsedwa;
  • Anawonjezera kuthekera kothandizira kukhathamiritsa pagawo lolumikizira pofotokoza njira yomanga "-C linker-plugin-lto".

Source: opennet.ru

Kuwonjezera ndemanga