Rust 1.39 ծրագրավորման լեզվի թողարկում

հրապարակված համակարգի ծրագրավորման լեզվի թողարկում Ժանգ 1.39, որը հիմնադրվել է Mozilla նախագծի կողմից։ Լեզուն կենտրոնանում է հիշողության անվտանգության վրա, ապահովում է հիշողության ավտոմատ կառավարում և ապահովում է առաջադրանքների բարձր զուգահեռության հասնելու միջոց՝ առանց աղբահանող սարքի կամ գործարկման ժամանակի օգտագործման:

Rust-ի հիշողության ավտոմատ կառավարումն ազատում է ծրագրավորողին ցուցիչի մանիպուլյացիայից և պաշտպանում է ցածր մակարդակի հիշողության մանիպուլյացիայից առաջացող խնդիրներից, ինչպիսիք են հիշողության ազատ մուտքերը, զրոյական ցուցիչի մատնանշումները, բուֆերների գերակատարումները և այլն: Մշակվում է փաթեթների կառավարիչ՝ գրադարանները բաշխելու, հավաքումն ապահովելու և ծրագրի կողմից կախվածությունները կառավարելու համար: բեռ, որը թույլ է տալիս մեկ սեղմումով ստանալ ծրագրի համար անհրաժեշտ գրադարանները: Գրադարանները հյուրընկալելու համար աջակցվում է պահեստ crates.io.

Հիմնական նորամուծություններ:

  • Կայունացված նոր ասինխրոն ծրագրավորման շարահյուսություն, որը հիմնված է «async» ֆունկցիայի, async move { ... } բլոկի և «.await» օպերատորի վրա, ինչը հեշտացնում է կարգավորիչներ գրելը, որոնք չեն արգելափակում հիմնական հրամանների հոսքը: Համեմատած ասինխրոն I/O-ի համար նախկինում առաջարկված API-ի հետ, async/.await կոնստրուկցիաները պարզ հասկանալի են, շատ ընթեռնելի և թույլ են տալիս իրականացնել բարդ ասինխրոն փոխազդեցություններ՝ օգտագործելով հոսքի կառավարման ծանոթ տեխնիկան՝ հիմնված հանգույցների, պայմանական հայտարարությունների և բացառությունների վրա:

    Async-await շարահյուսությունը թույլ է տալիս ստեղծել գործառույթներ, որոնք կարող են դադարեցնել դրանց կատարումը, կառավարումը վերադարձնել հիմնական շարանը և այնուհետև վերսկսել կատարումը այնտեղից, որտեղ նրանք դադարեցին: Օրինակ, I/O մշակելիս նման դադար է պահանջվում, որի դեպքում կարելի է այլ աշխատանք կատարել՝ սպասելով հաջորդ տվյալների ժամանմանը: «async fn»-ով և «async move»-ով սահմանված գործառույթներն ու բլոկները վերադարձնում են հատկանիշ Ապագա, որը սահմանում է հետաձգված ասինխրոն հաշվարկային ներկայացում։ Դուք կարող եք ուղղակիորեն սկսել հետաձգված հաշվարկը և ստանալ արդյունքը՝ օգտագործելով «.wait» օպերատորը: Ոչ մի գործողություն չի կատարվում կամ նախապես պլանավորված չէ, քանի դեռ չի կանչվել .wait, ինչը թույլ է տալիս ստեղծել բարդ ներկառուցված կառուցվածքներ՝ առանց լրացուցիչ ծախսերի:

    async fn first_function() -> u32 { .. }
    ...
    թող ապագան = first_function();
    ...
    թող արդյունքը՝ u32 = future.wait;

  • Կայունացված «#![feature(bind_by_move_pattern_guards)]», որը թույլ է տալիս օգտագործել պարտադիր տեսակի փոփոխականներ:շարժվելով« կաղապարներում և օգտագործեք հղումներ այս փոփոխականներին «եթե» արտահայտության բաժնում:համընկնում«. Օրինակ, այժմ թույլատրվում են հետևյալ կառույցները.

    fn main() {
    թող զանգված՝ Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    համընկնել զանգված {
    թվեր
    եթե nums.iter().sum::() == 10

    => {
    կաթիլ (համարներ);
    }
    _ => անհասանելի!(),
    }
    }

  • Ցուցում թույլատրվում է հատկանիշները ֆունկցիայի պարամետրերը, փակումները և ֆունկցիայի ցուցիչները սահմանելիս: Աջակցվում են պայմանական կոմպիլյացիայի ատրիբուտներ (cfg, cfg_attr), որոնք վերահսկում են ախտորոշումը lint-ի միջոցով (թույլատրել, զգուշացնել, մերժել և արգելել) և օժանդակ մակրո կանչող ատրիբուտները:

    fn len (
    #[cfg(windows)] հատված՝ &[u16], // օգտագործել պարամետրը Windows-ում
    #[cfg(not(windows))] հատված՝ &[u8], // օգտագործել այլ ՕՀ-ում
    ) -> օգտագործել {
    slice.len ()
    }

  • Նախազգուշացումներ հայտնաբերված խնդիրների մասին, երբ ստուգում եք փոփոխականների փոխառությունը (փոխառության ստուգիչ)՝ օգտագործելով NLL (Ոչ բառային կյանքի տևողություններ) տեխնիկան, թարգմանված ճակատագրական սխալների կատեգորիայի մեջ: Հիշենք, որ փոխառված փոփոխականների կյանքի ժամկետը հաշվի առնելու նոր մեխանիզմի վրա հիմնված ստուգման համակարգը հնարավորություն տվեց բացահայտել որոշ խնդիրներ, որոնք աննկատ մնացին հին ստուգման կոդը: Քանի որ նման ստուգումների ժամանակ սխալի արդյունքը կարող է ազդել նախկինում գործող կոդի հետ համատեղելիության վրա, սկզբում սխալների փոխարեն նախազգուշացումներ են տրվել: Զգուշացումներն այժմ փոխարինվել են Rust 2018 ռեժիմով աշխատելիս սխալներով: Հաջորդ թողարկումում սխալի ելքը կիրականացվի նաև Rust 2015 ռեժիմում, որը վերջապես կազատվի հին պարտքի ստուգիչից.
  • «const» հատկանիշը, որը որոշում է հաստատունների փոխարեն ցանկացած համատեքստում օգտագործելու հնարավորությունը, օգտագործվում է Vec::new, String::new, LinkedList::new, str::len, [T]::len ֆունկցիաների համար: , փող::as_bytes,
    abs, wrapping_abs և overflowing_abs;

  • API-ների նոր մասը փոխանցվել է կայուն կատեգորիայի՝ ներառյալ կայունացված մեթոդները
    Pin::into_inner, Instant::checked_duration_since և Instant::saturating_duration_since;

  • Բեռների փաթեթների կառավարիչն այժմ հնարավորություն ունի օգտագործելու «.toml» ընդլայնումը կազմաձևման ֆայլերի համար: Ավելացվել է նախնական աջակցություն՝ անմիջապես Cargo-ից ստանդարտ գրադարանի կառուցման համար: Ավելացվեց «--workspace» դրոշը՝ փոխարինելով հակասական «--all» դրոշը: Նոր դաշտ է ավելացվել մետատվյալներին »հրատարակել«, որը թույլ է տալիս հրապարակել կախվածությունները՝ նշելով git tag և տարբերակի համարը: Ավելացվեց «-Ztimings» թեստային տարբերակը՝ տարբեր կոմպիլյացիայի փուլերի կատարման ժամանակների HTML հաշվետվություն ստեղծելու համար:
  • Rustc կոմպիլյատորում ախտորոշիչ հաղորդագրությունները ներառում են կոդի պոչերի կրճատում, որը չի տեղավորվում տերմինալի մեջ: Տրամադրվել է երրորդ մակարդակի աջակցություն թիրախային հարթակների համար
    i686-անհայտ-uefi և sparc64-անհայտ-openbsd: Երրորդ մակարդակը ներառում է հիմնական աջակցություն, բայց առանց ավտոմատացված փորձարկման և պաշտոնական կառուցումների հրապարակման:

Source: opennet.ru

Добавить комментарий