Rust 1.34 Kutulutsa Chilankhulo cha Mapulogalamu

Chilankhulo cha pulogalamu ya Rust 1.34, yopangidwa ndi projekiti ya Mozilla, yatulutsidwa. 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. Kuti mugawire malaibulale, onetsetsani kusonkhana ndikuwongolera zodalira, polojekitiyo ikupanga Cargo package manager, yomwe imakulolani kuti mupeze malaibulale ofunikira pulogalamuyo ndikudina kamodzi. Malo osungiramo crates.io amathandizidwa kuti azisunga malaibulale.

Zatsopano zazikulu:

  • 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 kaundula wakunja ku ~/.cargo/config
    njira yatsopano "kaundula wanga" yaperekedwa mu gawo la "[registries]", ndipo njira ya "other-crate" yawonjezedwa kuti mutchule zolembera zakunja pazodalira ku Cargo.toml mu gawo la "[dependencies]". 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 ma doctests, omwe amakulolani kugwiritsa ntchito nambala yachitsanzo kuchokera muzolemba ngati mayeso. Wothandizira kale
    "?" zitha kugwiritsidwa ntchito kuthana ndi zolakwika pakuyesa pokhapokha ngati pali "fn main()" ntchito kapena "#[test]";

  • M'makhalidwe omwe amafotokozedwa pogwiritsa ntchito ma macros, ndizotheka kugwiritsa ntchito ma tokeni ("#[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)]”;
  • Makhalidwe a TryFrom ndi TryInto adakhazikika, kulola kusinthika 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()?)". Pamatembenuzidwe omwe amapambana nthawi zonse (mwachitsanzo, kuchokera ku mtundu wa u8 kupita ku u32), mtundu wolakwika Wosalakwitsa wawonjezedwa kuti ulole kugwiritsa ntchito mowonekera
    TryFrom pazokhazikitsa zonse zomwe zilipo za "Kuchokera";

  • Adatsitsa ntchito ya CommandExt ::before_exec, yomwe idalola kuphedwa kwa wogwirizira asanayambe kuphedwa potengera njira yamwana yomwe idapangidwa pambuyo pa foloko () kuyimba. 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.
    M'malo mwa before_exec, tikulimbikitsidwa kugwiritsa ntchito ntchito yosatetezeka CommandExt::pre_exec.

  • Mitundu yokhazikika ya atomiki yokhazikika yosainidwa ndi yosasainidwa kuyambira kukula kuchokera pa 8 mpaka 64 bits (mwachitsanzo, AtomicU8), komanso mitundu yosayinidwa NonZeroI[8|16|32|54|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;
  • Kuwonjeza kuthekera kothandizira kukhathamiritsa pagawo lolumikizira pofotokoza njira yomanga ya "-C linker-plugin-lto" (rustc imaphatikiza Rust code mu LLVM bitcode, yomwe imalola kukhathamiritsa kwa LTO kukhazikitsidwa).

Source: opennet.ru

Kuwonjezera ndemanga