հրապարակված համակարգի ծրագրավորման լեզվի թողարկում Ժանգ 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, ինչը թույլ է տալիս ստեղծել բարդ ներկառուցված կառուցվածքներ՝ առանց լրացուցիչ ծախսերի:
Կայունացված «#![feature(bind_by_move_pattern_guards)]», որը թույլ է տալիս օգտագործել պարտադիր տեսակի փոփոխականներ:շարժվելով« կաղապարներում և օգտագործեք հղումներ այս փոփոխականներին «եթե» արտահայտության բաժնում:համընկնում«. Օրինակ, այժմ թույլատրվում են հետևյալ կառույցները.
համընկնել զանգված {
թվեր
եթե 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: Երրորդ մակարդակը ներառում է հիմնական աջակցություն, բայց առանց ավտոմատացված փորձարկման և պաշտոնական կառուցումների հրապարակման: