հրապարակված համակարգի ծրագրավորման լեզվի թողարկում Ժանգ 1.40, որը հիմնադրվել է Mozilla նախագծի կողմից։ Լեզուն կենտրոնանում է հիշողության անվտանգության վրա, ապահովում է հիշողության ավտոմատ կառավարում և ապահովում է գործիքներ բարձր առաջադրանքների զուգահեռության հասնելու համար՝ առանց աղբահանող և աղբահանող սարք օգտագործելու: Runtime.
Rust-ի հիշողության ավտոմատ կառավարումն ազատում է ծրագրավորողին ցուցիչի մանիպուլյացիայից և պաշտպանում է ցածր մակարդակի հիշողության մանիպուլյացիայից առաջացող խնդիրներից, ինչպիսիք են հիշողության ազատ մուտքերը, զրոյական ցուցիչի մատնանշումները, բուֆերների գերակատարումները և այլն: Մշակվում է փաթեթների կառավարիչ՝ գրադարանները բաշխելու, հավաքումն ապահովելու և ծրագրի կողմից կախվածությունները կառավարելու համար: բեռ, որը թույլ է տալիս մեկ սեղմումով ստանալ ծրագրի համար անհրաժեշտ գրադարանները: Գրադարանները հյուրընկալելու համար աջակցվում է պահեստ crates.io.
Ավելացվեց կառուցվածքներ (կառուցվածք) և թվարկումներ (թվարկում Variant բլոկով) նշելու հնարավորություն՝ օգտագործելով « հատկանիշը#[ոչ_սպառիչ]», որը թույլ է տալիս ապագայում ավելացրեք նոր դաշտեր և տարբերակներ հայտարարված կառույցներին և թվարկումներին: Օրինակ, մոդուլների մշակողները, որոնք ունեն հրապարակային հայտարարագրված դաշտերով կառուցվածքներ, կարող են օգտագործել «#[non_exhaustive]»՝ նշելու այն կառույցները, որոնք կարող են ապագայում նոր դաշտեր ավելացնել: Մինչ այժմ, այս իրավիճակում, ծրագրավորողը ստիպված էր ընտրություն կատարել դաշտերը մասնավոր հայտարարելու և դաշտերի անփոփոխ ցանկին պարտադիր լինելու միջև: Նոր հատկանիշը վերացնում է այս սահմանափակումը և թույլ է տալիս ապագայում ավելացնել նոր դաշտեր՝ առանց նախկինում կազմված արտաքին կոդը կոտրելու վտանգի։ Արկղային փաթեթներում «համապատասխանում» բաժնում ընտրանքները համընկնելիս անհրաժեշտ է «_ => {...}» դիմակի հստակ սահմանումը, որը ծածկում է ապագա հնարավոր դաշտերը, հակառակ դեպքում նոր դաշտեր ավելացնելիս սխալ կցուցադրվի:
Ավելացված է ընթացակարգային մակրո mac!() տիպի համատեքստում զանգահարելու ունակություն: Օրինակ, այժմ կարող եք գրել «type Foo = expand_to_type!(bar);», եթե «expand_to_type»-ը ընթացակարգային մակրո է:
«արտաքին { ... }» բլոկներում ավելացրել է ընթացակարգային և վերագրելու մակրոներ, ներառյալ «bang!()» մակրոները, օրինակ՝
Մակրոներում իրականացվել է «մակրո_կանոններ!» տարրեր ստեղծելու ունակություն: Ստեղծվում է «մակրո_կանոններ»: հնարավոր է ինչպես ֆունկցիայի նման մակրոներում («mac!()»), այնպես էլ մակրոներում՝ ատրիբուտների տեսքով («#[mac]»):
$m:meta քարտեզագրման տարրում ավելացրել է նշանների կամայական թվարկման արժեքների աջակցություն («[TOKEN_STREAM]», «{TOKEN_STREAM}» և «(TOKEN_STREAM)»), օրինակ.
մակրո_կանոններ! ընդունել_մետա { ($m:meta) => {} }
accept_meta!( my::path );
accept_meta!( my::path = "lit" );
accept_meta!( my::path (a b c) );
accept_meta!( my::path [ a b c ] );
accept_meta!( my:: path { a b c } );
Rust 2015 ռեժիմում սխալի ելքը միացված է փոփոխականների փոխառությունը (փոխառության ստուգիչ) ստուգելիս հայտնաբերված խնդիրների դեպքում՝ օգտագործելով NLL (Ոչ բառային կյանքի տևողություններ) տեխնիկան: Նախկինում Rust 2018 ռեժիմով աշխատելիս զգուշացումները փոխարինվել են սխալներով։
Այն բանից հետո, երբ փոփոխությունը տարածվեց Rust 2015 ռեժիմի վրա, մշակողները կարողացան վերջապես ազատվել հին պարտքի ստուգիչից:
Հիշեցնենք, որ հաստատման համակարգը `փոխառված փոփոխականների կյանքի ընթացքում հաշվի առնելու նոր մեխանիզմի հիման վրա, հնարավոր է պարզել որոշ խնդիրներ, որոնք աննկատ են անցել հին հաստատման կոդով: Քանի որ նման ստուգումների ժամանակ սխալի արդյունքը կարող է ազդել նախկինում գործող կոդի հետ համատեղելիության վրա, սկզբում սխալների փոխարեն նախազգուշացումներ են տրվել:
«Const» հատկանիշը, որը որոշում է այն կայունության փոխարեն ցանկացած համատեքստում օգտագործելու հնարավորությունը, օգտագործվում է IS_Power_of_two գործառույթի համար (չստորագրված ամբողջ թվերի համար):
API- ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ TODO- ն:
Ընտրանք :: AS_DEREF, Option :: As_deref_mut, տարբերակ :: Flatten, Udpsocket :: to_le_bytes, {F32, f64, {F32, {F64, {F32, {F64, {F32, {F64, {F32, f64}::from_be_bytes, {f32,f64}::from_le_bytes և {fXNUMX,fXNUMX}::from_ne_bytes:
Փաթեթի մենեջերի բեռների մեջ իրականացվել է caching compiler նախազգուշացումները սկավառակի վրա: «cargo metadata» հրամանին ավելացրել է «cargo metadata» տարբերակը--ֆիլտր-հարթակ«Կախվածության լուծման սյունակում ցույց տալու միայն նշված թիրախային հարթակին կապված փաթեթները: Ավելացվեց http.ssl-տարբերակի կազմաձևման տարբերակ՝ վավեր TLS տարբերակները սահմանելու համար:
Ավելացվեց բաժինը հրապարակելու հնարավորությունը »dev-կախվածություններ«առանց «տարբերակի» ստեղնը նշելու։
Rustc կազմողը ապահովում է երրորդ մակարդակի աջակցություն թիրախային պլատֆորմներին ThumbV7NEON-Unkn-Linux-MusleAbihf, Aarch64-Unknown No-No-Softoat, MIPS64-Unknown-Linux-MIPLABI64: Երրորդ մակարդակը ներառում է հիմնական աջակցություն, բայց առանց ավտոմատացված փորձարկման և պաշտոնական կառուցումների հրապարակման: