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

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

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

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

  • Атрибутун колдонуу менен структураларды (структураны) жана тизмектерди (Variant блогу менен эсептешүү) белгилөө мүмкүнчүлүгү кошулду.#[толук эмес]", кайсы Бул берет келечекте жарыяланган структураларга жана эсептерге жаңы талааларды жана варианттарды кошуу. Мисалы, ачык жарыяланган талаалары бар структуралары бар модулдарды иштеп чыгуучулар келечекте жаңы талаалар кошулушу мүмкүн болгон структураларды белгилөө үчүн "#[толук эмес]" колдоно алышат. Буга чейин, бул кырдаалда, иштеп чыгуучу талааларды купуя жарыялоо жана талаалардын өзгөрүлгүс тизмесине милдеттүү түрдө тандоого аргасыз болгон. Жаңы атрибут бул чектөөнү алып салат жана мурда түзүлгөн тышкы кодду бузуу коркунучу жок келечекте жаңы талааларды кошууга мүмкүндүк берет. Сандык топтомдордо, “дал” бөлүмүндөгү варианттарды дал келгенде, “_ => {...}” маскасынын ачык аныктамасы талап кылынат, ал келечектеги мүмкүн болгон талааларды камтыйт, антпесе жаңы талааларды кошууда ката көрсөтүлөт.
  • Кошулган типтин контекстинде процедуралык макро Mac!() чалуу мүмкүнчүлүгү. Мисалы, эгер “типке_кеңейтүү” процедуралык макро болсо, “Foo type = expand_to_type!(бар);” деп жаза аласыз.
  • "extern { ... }" блокторунда кошулду процедуралык жана атрибуттук макросторду, анын ичинде “bang!()” макросторун колдонуу мүмкүнчүлүгү, мисалы:

    macro_regles! make_item { ($name:ident) => { fn $name(); } }

    тышкы {
    жасоо_буюм!(альфа);
    make_element!(бета);
    }

    extern "C" {
    #[менин_идентификатым_макросу] fn foo();
    }

  • Макростордо ишке ашырылган “makro_regles!” элементтерин түзүү мүмкүнчүлүгү. "makro_regles!" функцияга окшош макростордо («mac!()») жана атрибуттар түрүндөгү макростордо («#[mac]») да мүмкүн.
  • $m:meta карта түзүү элементинде кошулду ыктыярдуу токендерди санап чыгуу маанилерин колдоо ("[TOKEN_STREAM]", "{TOKEN_STREAM}" жана "(TOKEN_STREAM)"), мисалы:

    macro_regles! accept_meta {($m:meta) => {} }
    accept_meta!( my::path );
    accept_meta!( my::path = "light" );
    accept_meta!( my::path ( a b c ) );
    accept_meta!( my::path [ a b c ] );
    кабыл_мета!( менин::жол { a b c } );

  • Rust 2015 режиминде, NLL (Нон-Лексикалык Өмүрлөр) ыкмасын колдонуу менен өзгөрмөлөрдү (карыз текшерүүчү) текшерүүдө аныкталган көйгөйлөр үчүн ката чыгаруу иштетилген. Буга чейин эскертүүлөр Rust 2018 режиминде иштеп жатканда каталар менен алмаштырылган.
    Өзгөртүү Rust 2015 режимине узартылгандан кийин, иштеп чыгуучулар акыры жасай алышты кутулуп эски карыз текшерүүчүдөн.

    Карызга алынган өзгөрмөлөрдүн иштөө мөөнөтүн эсепке алуунун жаңы механизмине негизделген текшерүү системасы эски текшерүү коду байкабай калган айрым көйгөйлөрдү аныктоого мүмкүндүк бергенин эске сала кетели. Мындай текшерүүлөр үчүн ката чыгаруу мурда иштеген код менен шайкештикке таасир этиши мүмкүн болгондуктан, каталардын ордуна эскертүүлөр алгач берилген.

  • Аны константалардын ордуна каалаган контекстте колдонуу мүмкүнчүлүгүн аныктаган “const” атрибуту is_power_of_two функциясы үчүн колдонулат (белгисиз бүтүн сандар үчүн).
  • API'нин жаңы бөлүгү туруктуу категорияга жылдырылды, анын ичинде todo!() макросу жана slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, методдор турукташтырылды.
    Опция::as_deref, Опция::as_deref_mut, Опция::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32, f64}::from_be_bytes, {f32,f64}::from_le_bytes жана {f32,f64}::from_ne_bytes.

  • Пакет менеджеринде жүк
    ишке ашырылган дискте компилятордун эскертүүлөрүн кэштөө. "Жүк метадайындары" опциясы "жүк метадайындары" буйругуна кошулду--фильтр-платформа" көз карандылыкты чечүү тилкесинде көрсөтүлгөн максаттуу платформага байланган пакеттерди гана көрсөтүү. Жарактуу TLS версияларын аныктоо үчүн http.ssl-версия конфигурациясынын опциясы кошулду.
    Бөлүмүн жарыялоо мүмкүнчүлүгү кошулду "dev-көз карандылыктары""версия" баскычын көрсөтпөстөн.

  • Rustc компилятору thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 жана mips64el-unknown-linux-muslabi64 максаттуу платформаларына үчүнчү деңгээлде колдоо көрсөтөт. Үчүнчү деңгээл негизги колдоону камтыйт, бирок автоматташтырылган тестирлөөсүз жана расмий түзүмдөрдү жарыялоосуз.

Source: opennet.ru

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