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

հրապարակված համակարգի ծրագրավորման լեզվի թողարկում Ժանգ 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()
    }

    fn main() {
    թող _: i32 = gen_value(); # «i32»-ը կտպվի
    թող _: String = gen_value(); #-ը տպելու է «alloc::string::String»
    }

  • Ստանդարտ գրադարանի ընդլայնված գործառույթները.
    • 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-անհայտ-ոչ-էլֆ: Երրորդ մակարդակը ներառում է հիմնական աջակցություն, բայց առանց ավտոմատացված փորձարկման և պաշտոնական կառուցումների հրապարակման:

Source: opennet.ru

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