Kutolewa kwa lugha ya programu ya kutu 1.60

Lugha ya programu ya madhumuni ya jumla Rust 1.60, iliyoanzishwa na mradi wa Mozilla lakini sasa imeendelezwa chini ya ufadhili wa shirika huru lisilo la faida la Rust Foundation, imetolewa. Lugha inazingatia usimamizi salama wa kumbukumbu na hutoa njia za kufikia usawa wa juu wa kazi huku ikiepuka matumizi ya mtoaji wa takataka na wakati wa kukimbia (muda wa kukimbia umepunguzwa kuwa uanzishaji wa kimsingi na matengenezo ya maktaba ya kawaida).

Mbinu za utunzaji wa kumbukumbu za kutu huokoa msanidi programu kutokana na hitilafu wakati wa kuendesha viashiria na kulinda dhidi ya matatizo yanayotokea kutokana na utunzaji wa kumbukumbu wa kiwango cha chini, kama vile kufikia eneo la kumbukumbu baada ya kuachiliwa, kuondoa marejeleo ya viashiria visivyofaa, utiririshaji wa bafa, n.k. Ili kusambaza maktaba, kutoa miundo na kudhibiti utegemezi, mradi huunda msimamizi wa kifurushi cha Cargo. Hazina ya crates.io inatumika kwa kupangisha maktaba.

Usalama wa kumbukumbu hutolewa katika Rust wakati wa kukusanya kupitia kukagua marejeleo, kufuatilia umiliki wa kitu, kufuatilia muda wa maisha ya kitu (wigo), na kutathmini usahihi wa ufikiaji wa kumbukumbu wakati wa utekelezaji wa nambari. Kutu pia hutoa ulinzi dhidi ya mafuriko kamili, inahitaji uanzishaji wa lazima wa maadili tofauti kabla ya matumizi, hushughulikia makosa vyema katika maktaba ya kawaida, hutumia dhana ya marejeleo yasiyobadilika na vigeu kwa chaguo-msingi, hutoa uchapaji thabiti wa tuli ili kupunguza makosa ya kimantiki.

Ubunifu kuu:

  • Kikusanyaji cha rustc kina mfumo ulioimarishwa wa msingi wa LLVM wa kutoa data ya chanjo inayotumika kutathmini ufunikaji wa msimbo wakati wa majaribio. Ili kuwezesha data ya chanjo wakati wa kukusanyika, lazima utumie bendera ya "-Cinstrument-coverage", kwa mfano, kuanzisha mkusanyiko kwa amri ya "RUSTFLAGS="-C chombo-coverage" ya mizigo". Baada ya kuendesha faili inayoweza kutekelezwa iliyokusanywa kwa njia hii, faili ya default.profraw itahifadhiwa kwenye saraka ya sasa, kwa usindikaji ambayo unaweza kutumia matumizi ya llvm-profdata kutoka kwa sehemu ya llvm-tools-preview. Matokeo yaliyochakatwa na llvm-profdata yanaweza kupitishwa kwa llvm-cov kutoa ripoti ya chanjo ya msimbo iliyofafanuliwa. Taarifa kuhusu kiungo cha msimbo wa chanzo huchukuliwa kutoka kwa faili inayoweza kutekelezwa inayochunguzwa, ambayo inajumuisha data muhimu kuhusu uhusiano kati ya vihesabu vya chanjo na msimbo. 1| 1|fn kuu() {2| 1| println!("Hujambo, ulimwengu!"); 3| 1|}
  • Katika meneja wa kifurushi cha mizigo, usaidizi wa bendera ya "-timings" umeimarishwa, ambayo inajumuisha utoaji wa ripoti ya kina juu ya maendeleo ya ujenzi na wakati wa utekelezaji wa kila hatua. Ripoti inaweza kuwa muhimu kwa ajili ya kuboresha utendaji wa mchakato wa kuunganisha.
  • Kidhibiti cha kifurushi cha shehena hutoa syntax mpya ya utaratibu wa ujumuishaji wa masharti na uteuzi wa vitegemezi vya hiari, vilivyosanidiwa katika faili ya Cargo.toml kwa kuorodhesha orodha ya mali zilizotajwa katika sehemu ya [vipengele] na kuwezeshwa kwa kuwezesha sifa wakati wa uundaji wa kifurushi. kwa kutumia bendera ya "--vipengele". Toleo jipya linaongeza usaidizi wa utegemezi katika nafasi tofauti za majina na utegemezi dhaifu.

    Katika hali ya kwanza, inawezekana kutumia vipengele vilivyo na kiambishi awali "dep:" ndani ya sehemu ya "[vipengele]" ili kuunganisha kwa uwazi na utegemezi wa hiari bila kuwakilisha utegemezi huu kama kipengele. Katika kesi ya pili, msaada wa kuweka alama kwa ishara "?" umeongezwa. ("package-name?/feature-name") utegemezi wa hiari ambao unapaswa kujumuishwa tu ikiwa sifa nyingine inajumuisha utegemezi wa hiari uliotolewa. Kwa mfano, katika mfano ulio hapa chini, kuwezesha mali ya serde kutawezesha utegemezi wa "serde", pamoja na sifa ya "serde" kwa utegemezi wa "rgb", lakini ikiwa tu utegemezi wa "rgb" umewezeshwa mahali pengine: [dependencies] serde = {toleo = " 1.0.133", hiari = kweli } rgb = {toleo = "0.8.25", hiari = kweli } [vipengele] serde = ["dep:serde", "rgb?/serde"]

  • Usaidizi wa mkusanyiko wa nyongeza, ambao ulizimwa katika toleo la mwisho, umerudishwa. Hitilafu ya mkusanyaji iliyosababisha kipengele kuzimwa imetatuliwa.
  • Ilitatua matatizo fulani kwa kutoa vipima muda vya Papo hapo na hakikisho la muda wa monotonic, ambayo inazingatia muda uliotumiwa na mfumo katika hali ya usingizi. Hapo awali, API ya Mfumo wa Uendeshaji ilitumiwa wakati wowote inapowezekana kuendesha kipima saa, ambacho hakikuzingatia hali zenye matatizo zinazovunja ukiritimba wa wakati, kama vile matatizo ya vifaa, matumizi ya virtualization, au makosa katika mfumo wa uendeshaji.
  • Sehemu mpya ya API imehamishwa hadi kwa kitengo cha uthabiti, ikijumuisha mbinu na utekelezaji wa sifa zimeimarishwa:
    • Arc::new_cyclic
    • Rc::mzunguko_mpya
    • kipande::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • LabdaUninit::chukulia_init_tone
    • LabdaUninit:: assume_init_read
    • i8::abs_tofauti
    • i16::abs_tofauti
    • i32::abs_tofauti
    • i64::abs_tofauti
    • i128::abs_tofauti
    • isize::abs_diff
    • u8::abs_tofauti
    • u16::abs_tofauti
    • u32::abs_tofauti
    • u64::abs_tofauti
    • u128::abs_tofauti
    • tumia::abs_diff
    • Onyesha kwa io::ErrorKind
    • Kutoka kwa ExitCode
    • Sio kwa! (aina "kamwe")
    • _Op_Agiza<$t>
    • arch::is_aarch64_feature_detected!
  • Kiwango cha tatu cha usaidizi kimetekelezwa kwa majukwaa ya mips64-openwrt-linux-musl* na armv7-unknown-linux-uclibceabi (softfloat). Kiwango cha tatu kinahusisha usaidizi wa kimsingi, lakini bila majaribio ya kiotomatiki, uchapishaji wa miundo rasmi, au kuangalia ikiwa msimbo unaweza kutengenezwa.
  • Kikusanyaji kimebadilishwa ili kutumia LLVM 14.

Kwa kuongeza, unaweza kumbuka:

  • Usaidizi ulioongezwa wa kuunganisha kikusanya rustc kwa kutumia rustc_codegen_gcc backend, ambayo hukuruhusu kutumia maktaba ya libgccjit kutoka mradi wa GCC kama jenereta ya msimbo katika rustc, ambayo inaruhusu rustc kutoa usaidizi kwa usanifu na uboreshaji unaopatikana katika GCC. Ukuzaji wa mkusanyaji unamaanisha uwezo wa kutumia jenereta ya msimbo yenye msingi wa GCC katika rustc ili kuunda kikusanyaji cha rustc chenyewe. Kwa upande wa vitendo, kipengele hiki kinakuwezesha kujenga programu za kutu za usanifu ambazo hazijaungwa mkono hapo awali katika rustc.
  • Kutolewa kwa seti ya zana za uutils coreutils 0.0.13 kunapatikana, ambamo analogi ya kifurushi cha GNU Coreutils, iliyoandikwa upya katika lugha ya Rust, inatengenezwa. Coreutils huja na huduma zaidi ya mia moja, ikijumuisha aina, paka, chmod, chown, chroot, cp, tarehe, dd, echo, jina la mpangishaji, id, ln, na ls. Kusudi la mradi ni kuunda utekelezaji mbadala wa jukwaa la Coreutils, linaloweza kufanya kazi kwenye majukwaa ya Windows, Redox na Fuchsia, na pia usambazaji chini ya leseni ya MIT inayoruhusu, badala ya leseni ya GPL ya nakala.

    Toleo jipya limeboresha utekelezwaji wa huduma nyingi, ikiwa ni pamoja na kuboreshwa kwa kiasi kikubwa kwa upatanifu wa cp, dd, df, split na huduma za tr na wenzao kutoka mradi wa GNU. Nyaraka za mtandaoni zimetolewa. Kichanganuzi cha kupiga makofi kinatumika kuchanganua hoja za mstari wa amri, jambo ambalo limeboresha matokeo ya bendera ya "--help" na kuongeza usaidizi wa vifupisho vya amri ndefu (kwa mfano, unaweza kubainisha "ls -col" badala ya "ls -color". ”).

Chanzo: opennet.ru

Kuongeza maoni