Lugha ya programu ya Rust 1.98, iliyoanzishwa na mradi wa Mozilla lakini sasa imeendelezwa chini ya ufadhili wa Wakfu wa Rust huru usio wa faida, imetolewa. Lugha inazingatia usalama wa kumbukumbu na hutoa zana za kufikia usawa wa juu wa utekelezaji wa kazi, wakati wa kufanya bila matumizi ya mtoaji wa takataka na wakati wa kukimbia (muda wa kukimbia umepunguzwa kuwa uanzishaji wa msingi na matengenezo ya maktaba ya kawaida).
Mbinu za usimamizi wa kumbukumbu za Rust zimeundwa ili kuondoa makosa katika urekebishaji wa viashiria na kulinda dhidi ya masuala yanayotokana na usimamizi wa kumbukumbu wa kiwango cha chini, kama vile kufikia kumbukumbu baada ya kutolewa, kufuta viashiria visivyo na maana, overruns za bafa, na kadhalika. Mradi unaendeleza meneja wa kifurushi cha Cargo ili kusambaza maktaba, kuwezesha ujenzi, na kudhibiti utegemezi. Hifadhi ya crate.io inahifadhiwa kwa ajili ya kuhifadhi 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:
- Kwa aina za f32 na f64 zinazoelea, mbinu za aljebra za kujumlisha, kutoa, kuzidisha, kugawanya, na salio hutekelezwa, zikitekeleza uboreshaji sawa na chaguo la "-ffast-math" katika vikusanyaji vya C/C++. Mbinu hizi huruhusu kubadilisha mpangilio wa shughuli inapohitajika kwa uboreshaji kama vile vekta ya kitanzi. Kwa mfano, wakati wa kuhesabu "a + b + c + d" kwa kutumia nyongeza ya kawaida, kikusanyaji kitafanya hesabu kila wakati kwa mpangilio ule ule: "((a + b) + c) + d", lakini kwa kutumia mbinu ya aljebraic_add, inaweza kupanga usemi kama "(a + b) + (c + d)" na kutekeleza "(a + b)" na "(c + d)" sambamba kwa kutumia maagizo ya SIMD. Bei ya kutumia mbinu za aljebra ni kutokuwa na uhakika wa matokeo ya hesabu, ambayo yanaweza kutofautiana ndani ya kiwango cha hitilafu.
- Aina zote za nambari kamili za awali zina mbinu ya "format_into" iliyojengewa ndani ya kubadilisha nambari kuwa nyuzi, ambazo zinaweza kutumika badala ya kifurushi cha itoa. Bafa ya NumBuffer hupitishwa kama kigezo. , ambayo ukubwa wake umehakikishwa kuwa wa kutosha kuandika thamani yoyote ya aina iliyotumika katika umbo la desimali. Matokeo yake ni mfuatano uliopangwa &str, ambao muda wake wa matumizi umefungwa kwenye bafa.
- Mwingiliano kati ya kifaa cha kuunganisha cha ManuallyDrop na kiashiria mahiri cha Box hausababishi tena tabia isiyobainishwa.
- Sehemu mpya ya API imehamishwa hadi kwa kitengo cha uthabiti, ikijumuisha mbinu na utekelezaji wa sifa zimeimarishwa:
- safu::safu_ya_kando
- [T]::safu_ya_kipande kidogo
- kiini::fmt::NumBuffer
- <{integer}>::format_into
- Tuma/Sawazisha kwa std::process::CommandArgs
- {fN}::aljebraiki_ongeza
- {fN}::aljebraiki_sub
- {fN}::aljebraiki_mul
- {fN}::aljebraiki_div
- {fN}::aljebraiki_rem
- NonSufuri<{integer}>::from_str_radix
- Mfuatano::from_utf16le
- Mfuatano::from_utf16le_lossy
- Mfuatano::from_utf16be
- Mfuatano::from_utf16be_lossy
- [T]::strip_circumfix
- mstr::strip_circumfix
- Atomiki ::from_mut
- Atomiki ::get_mut_slice
- Atomiki ::kutoka_kipande_cha_mut
- std::range::urithi
- Mifumo lengwa thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf, na thumbv8r-none-eabihf imehamishiwa kwenye kiwango cha pili cha usaidizi, ambacho kinajumuisha dhamana ya ujenzi lakini hakuna dhamana ya kufaulu seti ya majaribio.
- Usaidizi umeongezwa kwa mifumo ya powerpc64-unknown-linux-gnuelfv2 na aarch64-unknown-linux-pauthtest, ambayo sasa iko katika usaidizi wa kiwango cha 3. Kiwango cha 3 kinajumuisha usaidizi wa msingi, lakini hakijumuishi majaribio ya kiotomatiki, matoleo rasmi ya ujenzi, au uthibitishaji wa ujenzi.
Zaidi ya hayo, kifurushi maarufu cha crate arrayref, ambacho kimepakuliwa zaidi ya mara milioni 53 katika siku 90 zilizopita na kinatumika kama utegemezi na vifurushi 403, kiliathiriwa. Washambuliaji walichapisha vifurushi vipya vyenye msimbo hasidi kwenye hazina ya crate.io: proc-macro1, proc-macro-en, aovine, arone, aronenao, na tinymember. Baadaye, matoleo mapya ya arrayref 0.3.10, internment 0.8.7, na append-only-vec 0.1.9 yalichapishwa kwenye hazina, kila moja ikiongeza kifurushi hasidi cha proc-macro1 kama utegemezi. Toleo hasidi la kifurushi cha arrayref lilichapishwa mnamo Agosti 20 saa 10:15 AM (MSK) na likaendelea kutumika hadi 11:41 AM, baada ya hapo likaondolewa na wasimamizi wa crate.io.
Mtunzaji wa arrayref bado hajawasiliana naye ili kufafanua hali hiyo, lakini inaaminika kwamba sifa zao zilinaswa na washambuliaji. Katika kifurushi cha proc-macro1, mabadiliko mabaya yalikuwepo kwenye hati ya ujenzi na kupakia faili inayoweza kutekelezwa kutoka kwa saraka ya nje. sevaFaili iliyopakuliwa ilihifadhiwa kama /tmp/rust-setup kwenye mifumo ya Unix, na katika Windows — %TEMP%\rust-setup.ps1 au %TEMP%\rust-setup-launch.vbs.
Chanzo: opennet.ru
