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

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

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

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

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

    .cargo/configге тышкы реестрлерди кошуу үчүн ($HOMEда же топтом каталогунда жайгашкан)
    каралган бөлүмүндө “[реестрлер]” жана тышкы реестрди колдонуу үчүн, 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|64|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" куруу опциясын көрсөтүү менен, байланыш стадиясында оптималдаштырууну иштетүү мүмкүнчүлүгү кошулду.

Source: opennet.ru

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