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

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

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

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

  • Cargo пакетинин менеджери crates.io коомдук реестри менен бирге боло турган альтернативдүү пакет реестрлери менен иштөө үчүн куралдарды кошту. Мисалы, проприетардык тиркемелерди иштеп чыгуучулар эми Cargo.toml сайтында көз карандылыктарды тизмелөөдө колдонула турган өздөрүнүн жеке реестрин колдоно алышат жана өз өнүмдөрү үчүн crates.io версиясына окшош версия моделин колдоно алышат, ошондой эле эки кутуга тең көз карандылыкты шилтемелей алышат. io жана өзүңүздүн реестриңизге.

    ~/.cargo/configге тышкы реестрди кошуу үчүн
    “[реестрлер]” бөлүмүндө “менин реестрим” жаңы варианты берилген, ал эми “[көз карандылыктар]” бөлүмүндө Cargo.tomlдеги көз карандылыктардагы тышкы реестр жөнүндө сөз кылуу үчүн “башка-карта” опциясы кошулган. Кошумча реестрге туташуу үчүн, жөн гана ~/.cargo/credentials файлына аутентификация белгисин коюп, буйрукту иштетиңиз.
    "жүк login --registry=my-registry" жана пакетти жарыялоо үчүн -
    "cargo publish -registry=my-registry";

  • “?” операторун колдонуу үчүн толук колдоо кошулду. доктесттерде, бул документациянын мисалы кодун сыноо катары колдонууга мүмкүндүк берет. Мурда оператор
    "?" "fn main()" же "#[test]" функциялары болгондо гана сыноону аткаруу учурунда каталарды иштетүү үчүн колдонулушу мүмкүн;

  • Процедуралык макростордун жардамы менен аныкталган ыңгайлаштырылган атрибуттарда токендердин ыктыярдуу топтомун колдонсо болот (“#[attr($tokens)]”, “#[attr[$tokens]] жана #[attr{$tokens}]”) . Мурда элементтер сап литералдарын колдонуу менен дарак/рекурсивдүү формада гана көрсөтүлүшү мүмкүн, мисалы “#[foo(bar, baz(quux, foo = “bar”))]”, бирок азыр санап чыгууларды (' #[аралыгы(0. .10)]') жана “#[bound(T: MyTrait)]” сыяктуу конструкциялар;
  • TryFrom жана TryInto белгилери турукташтырылып, каталарды иштетүү менен типти өзгөртүүгө мүмкүндүк берет. Мисалы, бүтүн сан түрлөрү бар from_be_bytes сыяктуу методдор массивдерди киргизүү катары колдонушат, бирок маалыматтар көбүнчө Slice тибинде келет жана массивдер менен кесимдердин ортосундагы конвертацияны кол менен жасоо кыйынчылык жаратат. Жаңы белгилердин жардамы менен көрсөтүлгөн операцияны .try_into()га чалуу аркылуу тез арада аткарууга болот, мисалы, “let num = u32::from_be_bytes(slice.try_into()?)”. Ар дайым ийгиликтүү болгон конверсиялар үчүн (мисалы, u8 түрүнөн u32ге чейин) катанын тунук түрү кошулган.
    TryFrom "Кимден" бардык учурдагы ишке ашыруулары үчүн;

  • CommandExt::before_exec функциясы эскирди, ал fork() чакыруусунан кийин айрыланган бала процессинин контекстинде аткарылган exec чейин иштеткичти аткарууга мүмкүндүк берет. Мындай шарттарда, файлдын дескрипторлору жана картага түшүрүлгөн эстутум аймактары сыяктуу ата-эне процессинин кээ бир ресурстары кайталанышы мүмкүн, бул аныкталбаган жүрүм-турумга жана китепканалардын туура эмес иштешине алып келиши мүмкүн.
    before_exec ордуна, кооптуу CommandExt::pre_exec функциясын колдонуу сунушталат.

  • Өлчөмү 8ден 64 битке чейин (мисалы, AtomicU8) өзгөргөн турукташтырылган кол коюлган жана кол коюлбаган атомдук бүтүн сан түрлөрү, ошондой эле кол коюлган типтер NonZeroI[8|16|32|54|128].
  • API'нин жаңы бөлүгү туруктуу категорияга жылдырылды, анын ичинде Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[кошуу|кошумчасы ] жана SystemTime ыкмалары турукташтырылган ::checked_[кошуу|кошумча]. iter::from_fn жана iter::successors функциялары турукташтырылды;
  • Бардык бүтүн сан түрлөрү үчүн checked_pow, saturating_pow, wrapping_pow жана overflowing_pow ыкмалары ишке ашырылат;
  • "-C linker-plugin-lto" куруу опциясын көрсөтүү менен, байланыш стадиясында оптималдаштырууну иштетүү мүмкүнчүлүгү кошулду (rustc Rust кодун LLVM биткодуна түзөт, бул LTO оптималдаштыруусун колдонууга мүмкүндүк берет).

Source: opennet.ru

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