Rust 1.38 Программалоо тили релиз

жарыяланган системалык программалоо тили чыгаруу Дат 1.38, Mozilla долбоору тарабынан негизделген. Бул тил эстутумдун коопсуздугуна басым жасайт, эстутумду автоматтык башкарууну камсыз кылат жана таштанды жыйноочу же иштөө убактысын колдонбостон, жогорку тапшырма параллелизмине жетүү үчүн каражат берет.

Rust'тун эстутумдун автоматтык башкаруусу иштеп чыгуучуну көрсөткүчтөрдү манипуляциялоодон бошотот жана эстутумдун төмөнкү деңгээлдеги манипуляциясынан келип чыккан көйгөйлөрдөн коргойт, мисалы, эстутумга бош кирүү мүмкүнчүлүгү, нөл көрсөткүчтү жокко чыгаруу, буферди ашып кетүү жана башка ушул сыяктуу. Китепканаларды бөлүштүрүү, чогултууну камсыз кылуу жана долбоор тарабынан көз карандылыкты башкаруу үчүн пакет менеджери иштелип чыгууда. жүк, программага керектүү китепканаларды бир чыкылдатуу менен алууга мүмкүндүк берет. Китепканаларды жайгаштыруу үчүн репозиторий колдоого алынат crates.io.

негизги инновациялар:

  • Көз карандылыктын метадайындары жеткиликтүү болгондон кийин, анын компиляциясынын аякташын күтпөстөн, көз каранды ящиктин пакетин куруу башталат. Пакетти түзүүдө көз карандылыктарды толук чогултуунун кереги жок, жөн гана типтердин, көз карандылыктардын жана экспорттолуучу элементтердин тизмелерин камтыган метаберилиштерди аныктоо керек. Метаберилиштер компиляция процессинин башталышында жеткиликтүү болот, андыктан байланышкан пакеттерди азыр алда канча эрте түзсө болот. Жалгыз пакеттерди курууда сунуш кылынган режим аткарууга таасир этпейт, бирок куруу тармакталган көз карандылыктары бар пакеттерди камтыса, жалпы куруу убактысы 10-20% га кыскарышы мүмкүн;
  • Функцияларды туура эмес пайдаланууну аныктоону камсыз кылат std::mem:: башталбаган и std::mem::нөл. Мисалы, std::mem::uninitialized массивдерди тез түзүү үчүн ыңгайлуу, бирок ал компиляторду адаштырат, анткени ал инициализациялангандай көрүнөт, бирок чындыгында маани инициализацияланбаган бойдон кала берет. mem::uninitialized функциясы мурунтан эле эскирилген деп белгиленген жана анын ордуна аралык түрүн колдонуу сунушталат MaybeUnit. mem::zeroed болсо, бул функция нөл маанилерин кабыл албаган типтерде көйгөйлөрдү жаратышы мүмкүн.

    Белгисиз жүрүм-турумду аныктоого жардам берүү үчүн, жаңы релиз компиляторго линт текшерүүсүн кошот, ал mem::uninitialized же mem::noled менен кээ бир көйгөйлөрдү аныктайт. Мисалы, эми сиз нөл маанилерди кабыл ала албаган көрсөткүч объекттерин билдирген &T жана Box‹T› түрлөрү менен mem::uninitialized же mem::noled колдонууга аракет кылып жатканда ката аласыз;

  • "#[эскирилген]" атрибуту кутучалардын топтомдорун эскирди деп белгилөө жана келечекте жок кылууну пландаштыруу үчүн кеңейтилди. Rust 1.38 боюнча, бул атрибут макрос үчүн да колдонулушу мүмкүн;
  • Субмодулдарда “#[глобалдык_бөлүүчү]” атрибутун колдонуу мүмкүнчүлүгү кошулду;
  • Кошулган функция std :: any :: type_name, бул сизге мүчүлүштүктөрдү оңдоо максатында пайдалуу болушу мүмкүн болгон түрдүн атын табууга мүмкүндүк берет. Мисалы, программанын аткарылышынын жүрүшүндө функция кандай түргө чакырылганын биле аласыз:

    fn gen_value‹T: Демейки>() -› T {
    println!("{} нускасын инициализациялоо", std::any::type_name::‹T›());
    Демейки ::default()
    }

    fn main() {
    let _: i32 = gen_value(); # "i32" басып чыгарылат
    let _: String = gen_value(); # "alloc::string::String" басып чыгарат
    }

  • Стандарттык китепкананын кеңейтилген функциялары:
    • slice::{concat, connect, join} эми &T;дан тышкары &[T] маанисин ала алат;
    • "*const T" жана "*mut T" азыр маркерди ишке ашырат:: Unpin;
    • "Arc‹[T]›" жана "Rc‹[T]›" азыр FromIterator‹T› ишке ашырат;
    • iter::{StepBy, Peekable, Take} азыр DoubleEndedIterator ишке ашырат.
    • ascii::EscapeDefault Clone жана дисплейди ишке ашырат.
  • API'лердин жаңы бөлүгү туруктуу категорияга, анын ичинде стабилдештирилген ыкмаларга которулду
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Узактыгы::as_secs_f{32|64},
    • Duration::div_duration_f{32|64},
    • Узактыгы::div_f{32|64},
    • Узактыгы::from_secs_f{32|64},
    • Узактыгы::mul_f{32|64},
    • калган менен бөлүү операциялары
      div_euclid жана rem_euclid бардык бүтүн примитивдер үчүн;

  • Жүк пакетинин менеджеринде ар кандай функцияларды иштетүү үчүн "--features" опциясын бир нече жолу көрсөтүү үчүн колдоо кошулду;
  • Компилятор үчүнчүнү камсыз кылат деңгээл максаттуу платформаларды колдоо aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvux7- максаттуу armv-, -gnueabi, armv7-белгисиз-linux-musleabi, алты бурчтуу-белгисиз-linux-musl жана riscv32i-белгисиз-эч ким-элф. Үчүнчү деңгээл негизги колдоону камтыйт, бирок автоматташтырылган тестирлөөсүз жана расмий түзүмдөрдү жарыялоосуз.

Source: opennet.ru

Комментарий кошуу