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

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

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

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

  • Турукташтырылган жаңы асинхрондук программалоо синтаксиси, "асинхрондук" функциясына, асинхрондук кыймыл { ... } блогуна жана ".await" операторуна негизделген, бул негизги буйрук агымына бөгөт койбогон иштеткичтерди жазууну жеңилдетет. Асинхрондук киргизүү/чыгаруу үчүн мурда сунушталган API менен салыштырганда, асинхрондуу/.await конструкциялары түшүнүү үчүн жөнөкөй, өтө окула турган жана циклдерге, шарттуу билдирүүлөргө жана өзгөчө кырдаалдарга негизделген агымды башкаруунун тааныш ыкмаларын колдонуу менен татаал асинхрондук өз ара аракеттенишүүнү ишке ашырууга мүмкүндүк берет.

    Async-await синтаксиси алардын аткарылышын тындыра турган функцияларды түзүүгө, башкарууну негизги жипке кайтарууга жана андан кийин алар токтогон жерден аткарууну улантууга мүмкүндүк берет. Мисалы, киргизүү/чыгаруу процессинде мындай тыныгуу талап кылынат, мында кийинки маалыматтардын келишин күтүү учурунда башка иштерди аткарууга болот. "Aync fn" жана "async move" менен аныкталган функциялар жана блоктор өзгөчөлүктү кайтарат болочок, кийинкиге калтырылган асинхрондук эсептөө өкүлчүлүгүн аныктайт. Сиз түздөн-түз кийинкиге калтырылган эсептөөнү баштап, натыйжаны “.await” оператору аркылуу ала аласыз. .await чакырылмайынча эч кандай аракет жасалбайт же алдын ала пландаштырылбайт, бул татаал уя салынган конструкцияларды кошумча чыгымдарсыз түзүүгө мүмкүндүк берет.

    async fn first_function() -> u32 { .. }
    ...
    келечек = first_function();
    ...
    натыйжа болсун: u32 = future.await;

  • Турукташтырылган "#![өзгөчөлүк(байланыштуу_кыймылдатуу_үлгү_коргоочулары)]", бириктирүү түрү менен өзгөрмөлөрдү колдонууга мүмкүндүк берет "көчүрүү" шаблондордо жана бул өзгөрмөлөргө шилтемелерди "эгер" сөз айкашынын "if" бөлүмүндө колдонуңузмелдеш". Мисалы, азыр төмөнкү курулуштарга жол берилет:

    fn main() {
    let массив: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    дал келүү массив {
    нумдар
    if nums.iter().sum::() == 10

    => {
    drop(сан);
    }
    _ => жеткиликсиз!(),
    }
    }

  • Көрсөтүүгө уруксат берилген атрибуттар функциянын параметрлерин, жабууларды жана функция көрсөткүчтөрүн аныктоодо. Шарттуу компиляция атрибуттары (cfg, cfg_attr) диагностиканы линт (уруксат берүү, эскертүү, четке кагуу жана тыюу салуу) жана көмөкчү макро чакыруу атрибуттары колдоого алынат.

    fn len(
    #[cfg(windows)] тилке: &[u16], // параметрди колдонуу Windows
    #[cfg(not(windows))] кесим: &[u8], // башка ОСте колдонуу
    ) -> колдонуу {
    slice.len()
    }

  • NLL (Lexical Non-Lexical Lifetimes) ыкмасын колдонуу менен өзгөрмөлөрдү (карыз текшерүүчү) текшерүүдө аныкталган көйгөйлөр жөнүндө эскертүүлөр, которулган өлүмгө алып келген каталар категориясына кирет. Карызга алынган өзгөрмөлөрдүн иштөө мөөнөтүн эсепке алуунун жаңы механизмине негизделген текшерүү системасы эски текшерүү коду байкабай калган айрым көйгөйлөрдү аныктоого мүмкүндүк бергенин эске сала кетели. Мындай текшерүүлөр үчүн ката чыгаруу мурда иштеген код менен шайкештикке таасир этиши мүмкүн болгондуктан, каталардын ордуна эскертүүлөр алгач берилген. Эскертүү азыр Rust 2018 режиминде иштеп жатканда каталар менен алмаштырылды. Кийинки чыгарылышта ката чыгаруу да Rust 2015 режиминде ишке ашырылат, ал акыры эски карызды текшерүүчүдөн кутулат;
  • Константалардын ордуна каалаган контекстте колдонуу мүмкүнчүлүгүн аныктаган “const” атрибуту Vec::new, String::new, LinkedList::new, str::len, [T]::len функциялары үчүн колдонулат. , str::as_bytes,
    abs, wrapping_abs жана overflowing_abs;
  • API'лердин жаңы бөлүгү туруктуу категорияга, анын ичинде стабилдештирилген ыкмаларга которулду
    Pin::into_inner, Instant::checked_duration_since жана Instant::saturating_duration_since;
  • Жүк пакетинин менеджери эми конфигурация файлдары үчүн “.toml” кеңейтүүсүн колдонуу мүмкүнчүлүгүнө ээ. Түздөн-түз жүктөн стандарттык китепкананы куруу үчүн алдын ала колдоо кошулду. Талаштуу "--бардыгы" желекчесинин ордуна "--workspace" желекчеси кошулду. Метадайындарга жаңы талаа кошулду "чыгаруу", бул сизге git теги жана версия номерин көрсөтүү менен көз карандылыктарды жарыялоого мүмкүндүк берет. Ар кандай компиляция этаптарынын аткарылуу убакыттары жөнүндө HTML отчетун түзүү үчүн "-Ztimings" тест опциясы кошулду.
  • Rustc компиляторунда диагностикалык билдирүүлөр терминалга туура келбеген коддун куйруктарын кыркууну камтыйт. Максаттуу платформалар үчүн үчүнчү деңгээлдеги колдоо көрсөтүлдү
    i686-unknown-uefi жана sparc64-unknown-openbsd. Үчүнчү деңгээл негизги колдоону камтыйт, бирок автоматташтырылган тестирлөөсүз жана расмий түзүмдөрдү жарыялоосуз.

Source: opennet.ru

DDoS коргоосу, VPS VDS серверлери бар сайттар үчүн ишенимдүү хостинг сатып алыңыз 🔥 DDoS коргоосу, VPS VDS серверлери бар ишенимдүү веб-сайт хостингин сатып алыңыз | ProHoster