հրապարակված համակարգի ծրագրավորման լեզվի թողարկում Ժանգ 1.38, որը հիմնադրվել է Mozilla նախագծի կողմից։ Լեզուն կենտրոնանում է հիշողության անվտանգության վրա, ապահովում է հիշողության ավտոմատ կառավարում և ապահովում է առաջադրանքների բարձր զուգահեռության հասնելու միջոց՝ առանց աղբահանող սարքի կամ գործարկման ժամանակի օգտագործման:
Rust-ի հիշողության ավտոմատ կառավարումն ազատում է ծրագրավորողին ցուցիչի մանիպուլյացիայից և պաշտպանում է ցածր մակարդակի հիշողության մանիպուլյացիայից առաջացող խնդիրներից, ինչպիսիք են հիշողության ազատ մուտքերը, զրոյական ցուցիչի մատնանշումները, բուֆերների գերակատարումները և այլն: Մշակվում է փաթեթների կառավարիչ՝ գրադարանները բաշխելու, հավաքումն ապահովելու և ծրագրի կողմից կախվածությունները կառավարելու համար: բեռ, որը թույլ է տալիս մեկ սեղմումով ստանալ ծրագրի համար անհրաժեշտ գրադարանները: Գրադարանները հյուրընկալելու համար աջակցվում է պահեստ crates.io.
Ավելացվել է խողովակաշարային կոմպիլյացիայի ռեժիմ (խողովակով), որի դեպքում կախված տուփի փաթեթի ստեղծումը սկսվում է հենց կախվածության մետատվյալների հասանելի դառնալուն պես՝ չսպասելով դրա կազմման ավարտին: Փաթեթ կազմելիս կախվածությունները պետք չէ ամբողջությամբ հավաքել, պարզապես պետք է սահմանել մետատվյալները, որոնք ներառում են տեսակների, կախվածությունների և արտահանվող տարրերի ցուցակները։ Մետատվյալները հասանելի են դառնում հավաքման գործընթացի սկզբում, ուստի կապակցված փաթեթներն այժմ կարող են կազմվել շատ ավելի վաղ: Միայնակ փաթեթներ կառուցելիս առաջարկվող ռեժիմը չի ազդում աշխատանքի վրա, բայց եթե build-ը ծածկում է ճյուղավորված կախվածություններով փաթեթներ, ապա կառուցման ընդհանուր ժամանակը կարող է կրճատվել 10-20%-ով;
Ապահովում է գործառույթների ոչ ճիշտ օգտագործման հայտնաբերումը std::mem::unitialized и std::mem::zeroed. Օրինակ, std::mem::uniitialized-ը հարմար է զանգվածներ արագ ստեղծելու համար, բայց այն մոլորեցնում է կոմպիլյատորին, քանի որ այն կարծես սկզբնավորվել է, բայց իրականում արժեքը մնում է չնախաստորագրված: Mem::uniinialized ֆունկցիան արդեն նշված է որպես հնացած, և դրա փոխարեն խորհուրդ է տրվում օգտագործել միջանկյալ տեսակ Գուցե միավոր. Ինչ վերաբերում է mem::zeroed-ին, ապա այս ֆունկցիան կարող է խնդիրներ առաջացնել այնպիսի տեսակների հետ, որոնք չեն կարող ընդունել զրոյական արժեքներ:
Չսահմանված վարքագիծը բացահայտելու համար նոր թողարկումն ավելացնում է կոմպիլյատորին lint ստուգում, որը հայտնաբերում է որոշ խնդիրներ mem::uniitialized կամ mem::zeroed: Օրինակ, դուք հիմա սխալ եք ստանում, երբ փորձում եք օգտագործել mem::uniitialized կամ mem::zeroed &T և Box‹T› տեսակներով, որոնք ներկայացնում են ցուցիչի օբյեկտներ, որոնք չեն կարող ընդունել զրոյական արժեքներ;
«#[հնացած]» հատկանիշը ընդլայնվել է, որպեսզի արկղային փաթեթները նշվեն որպես հնացած և հետագայում ջնջվեն: Rust 1.38-ի դրությամբ այս հատկանիշը կարող է օգտագործվել նաև մակրոների համար.
Ավելացրել է ենթամոդուլներում «#[global_allocator]» հատկանիշը օգտագործելու հնարավորությունը.
Ավելացված հատկություն std::any::type_name, որը թույլ է տալիս պարզել այն տեսակի անվանումը, որը կարող է օգտակար լինել վրիպազերծման նպատակով։ Օրինակ, ծրագրի կատարման ընթացքում կարող եք պարզել, թե ինչ տեսակի համար է կոչվում ֆունկցիան.
fn gen_value‹T: Կանխադրված>() -› T {
println!("Initializing an instance of {}", std::any::type_name::‹T›());
Կանխադրված::default()
}
slice::{concat, connect, join} այժմ կարող է վերցնել &[T] արժեքը, բացի &T;
«*const T»-ը և «*mut T»-ն այժմ իրականացնում են մարկեր::Unpin;
«Arc‹[T]›» և «Rc‹[T]›» այժմ իրականացնում են FromIterator‹T›;
iter::{StepBy, Peekable, Take} այժմ իրականացնում է DoubleEndedIterator-ը:
ascii::EscapeDefault-ն իրականացնում է Clone և Display:
API-ների նոր մասը փոխանցվել է կայուն կատեգորիայի՝ ներառյալ կայունացված մեթոդները
‹*const T›::cast, ‹*mut T›::cast,
Տևողությունը՝:as_secs_f{32|64},
Տևողությունը՝:div_duration_f{32|64},
Տևողությունը՝:div_f{32|64},
Տևողությունը՝:from_secs_f{32|64},
Տևողությունը՝:mul_f{32|64},
մնացորդով բաժանման գործողություններ
div_euclid և rem_euclid բոլոր պրիմիտիվների համար;
Ավելացվել է «--հատկանիշներ» տարբերակը մի քանի անգամ նշելու աջակցություն՝ բեռների փաթեթների կառավարիչում տարբեր հնարավորություններ միացնելու համար.
Կազմողն ապահովում է երրորդը մակարդակ աջակցություն թիրախային հարթակների համար aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc-unknown թիրախներ, armlinuxv -gnueabi, armv7-անհայտ-linux-musleabi, վեցանկյուն-անհայտ-linux-musl և riscv7i-անհայտ-ոչ-էլֆ: Երրորդ մակարդակը ներառում է հիմնական աջակցություն, բայց առանց ավտոմատացված փորձարկման և պաշտոնական կառուցումների հրապարակման: