Mozilla долбоору тарабынан негизделген, бирок азыр көз карандысыз бейөкмөт Rust Фондунун колдоосу астында иштелип чыккан Rust 1.98 программалоо тили чыгарылды. Бул тил эстутумдун коопсуздугуна көңүл бурат жана тапшырманы аткаруунун жогорку параллелдүүлүгүнө жетүү үчүн шаймандарды камсыз кылат, ошол эле учурда таштанды жыйгычты жана иштөө убактысын колдонбостон (иштөө убактысы стандарттык китепкананын негизги инициализациясына жана тейлөөсүнө чейин кыскарган).
Rust компаниясынын эстутумду башкаруу ыкмалары көрсөткүчтөрдү манипуляциялоодогу каталарды жок кылуу жана төмөнкү деңгээлдеги эстутумду башкаруудан келип чыккан көйгөйлөрдөн, мисалы, бошотулгандан кийин эстутумга кирүү, нөлдүк көрсөткүчтөрдү алып салуу, буфердин ашыкча жүктөлүшү жана башкалардан коргоо үчүн иштелип чыккан. Долбоор китепканаларды таратуу, курууну жеңилдетүү жана көз карандылыктарды башкаруу үчүн Cargo пакет менеджерин иштеп чыгууда. crates.io репозиторийи китепканаларды жайгаштыруу үчүн тейленет.
Эстутумдун коопсуздугу Rust программасында компиляция убагында маалымдама текшерүү, объектке ээлик кылуу, объекттин иштөө мөөнөттөрүн (кошумчаларын) эсепке алуу жана кодду аткаруу учурунда эстутумга жетүүнүн тууралыгын баалоо аркылуу камсыз кылынат. Rust ошондой эле бүтүн сандардын ашып кетишинен коргоону камсыз кылат, колдонуудан мурун өзгөрмө маанилерин милдеттүү түрдө инициализациялоону талап кылат, стандарттык китепканада каталарды жакшыраак иштетет, өзгөрүлгүс шилтемелер жана өзгөрмөлөр концепциясын демейки боюнча колдонот, логикалык каталарды азайтуу үчүн күчтүү статикалык терүүнү сунуштайт.
Негизги инновациялар:
- f32 жана f64 калкыма чекиттүү түрлөрү үчүн кошуу, кемитүү, көбөйтүү, бөлүү жана калдык үчүн алгебралык ыкмалар ишке ашырылып, C/C++ компиляторлорундагы "-ffast-math" опциясына окшош оптималдаштырууларды ишке ашырат. Бул ыкмалар цикл векторизациясы сыяктуу оптималдаштыруулар үчүн зарыл болгон учурда операциялардын тартибин өзгөртүүгө мүмкүндүк берет. Мисалы, кадимки кошууну колдонуп "a + b + c + d" эсептөөдө компилятор эсептөөнү ар дайым ошол эле тартипте аткарат: "((a + b) + c) + d", бирок algebraic_add ыкмасын колдонуу менен ал туюнтманы "(a + b) + (c + d)" катары топтоштура алат жана SIMD көрсөтмөлөрүн колдонуп, "(a + b)" жана "(c + d)" функцияларын параллель түрдө аткара алат. Алгебралык ыкмаларды колдонуунун баасы эсептөө натыйжаларынын детерминизмсиздигинде, ал ката чегинде өзгөрүшү мүмкүн.
- Бардык жөнөкөй бүтүн сан түрлөрү сандарды саптарга айландыруу үчүн орнотулган "format_into" ыкмасына ээ, аны itoa пакетинин ордуна колдонсо болот. NumBuffer буфери параметр катары өткөрүлүп берилет. , анын өлчөмү колдонулган типтеги каалаган маанини ондук түрдө жазууга жетиштүү деп кепилдик берилет. Чыгарылыш форматталган &str сап болуп саналат, анын иштөө мөөнөтү буферге байланган.
- ManuallyDrop жабдыгы менен Box акылдуу көрсөткүчүнүн ортосундагы өз ара аракеттенүү мындан ары аныкталбаган жүрүм-турумга алып келбейт.
- API'нин жаңы бөлүгү туруктуу категорияга жылдырылды, анын ичинде сапаттардын ыкмалары жана ишке ашырылышы турукташтырылды:
- str::substr_range
- [T]::кичинекей_диапазон
- негизги::fmt::NumBuffer
- <{бүтүн сан}>::формат_ичине
- std::process::CommandArgs үчүн жөнөтүү/синхрондоштуруу
- {fN}::алгебралык_кошумча
- {fN}::алгебралык_суб
- {fN}::алгебралык_муль
- {fN}::алгебралык_див
- {fN}::алгебралык_режим
- Нөл эмес<{бүтүн сан}>::from_str_radix
- Сап::from_utf16le
- Сап::from_utf16le_lossy
- Сап::from_utf16be
- Сап::from_utf16be_lossy
- [T]::strip_circumfix
- str::strip_circumfix
- Атомдук ::from_mut
- Атомдук ::get_mut_slice
- Атомдук ::from_mut_slice
- std::range::legacy
- thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf жана thumbv8r-none-eabihf максаттуу платформалары колдоонун экинчи деңгээлине жылдырылды, ал куруу кепилдигин камтыйт, бирок тесттик топтомдон өтүүгө кепилдик бербейт.
- powerpc64-unknown-linux-gnuelfv2 жана aarch64-unknown-linux-pauthtest платформалары үчүн колдоо кошулду, алар азыр 3-деңгээлде колдоого алынат. 3-деңгээл негизги колдоону камтыйт, бирок автоматташтырылган тестирлөөнү, расмий курулма релиздерин же курулманы текшерүүнү камтыбайт.
Мындан тышкары, акыркы 90 күндө 53 миллиондон ашык жолу жүктөлүп алынган жана 403 пакет тарабынан көз карандылык катары колдонулган популярдуу crate arrayref пакети бузулган. Чабуулчулар crates.io репозиторийине зыяндуу кодду камтыган жаңы пакеттерди жайгаштырышкан: proc-macro1, proc-macro-en, aovine, arone, aronenao жана tinymember. Кийинчерээк, arrayref 0.3.10, internment 0.8.7 жана append-only-vec 0.1.9 жаңы релиздери репозиторийге жарыяланып, ар бири зыяндуу proc-macro1 пакетин көз карандылык катары кошкон. arrayref пакетинин зыяндуу версиясы 20-августта саат 10:15те (MSK) жарыяланып, саат 11:41ге чейин активдүү бойдон калган, андан кийин crates.io администраторлору тарабынан алынып салынган.
arrayrefтин тейлөөчүсү менен кырдаалды тактоо үчүн байланыша элек, бирок алардын ишеним грамоталары чабуулчулар тарабынан кармалып калган деп болжолдонууда. proc-macro1 пакетинде build скриптинде зыяндуу өзгөртүү бар болуп, ал тышкы каталогдон аткарылуучу файлды жүктөгөн. серверЖүктөлгөн файл Unix системаларында /tmp/rust-setup катары сакталган жана Windows — %TEMP%\rust-setup.ps1 же %TEMP%\rust-setup-launch.vbs.
Source: opennet.ru
