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

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

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

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

  • Ավելացվեց կառուցվածքներ (կառուցվածք) և թվարկումներ (թվարկում Variant բլոկով) նշելու հնարավորություն՝ օգտագործելով « հատկանիշը#[ոչ_սպառիչ]», որը թույլ է տալիս ապագայում ավելացրեք նոր դաշտեր և տարբերակներ հայտարարված կառույցներին և թվարկումներին: Օրինակ, մոդուլների մշակողները, որոնք ունեն հրապարակային հայտարարագրված դաշտերով կառուցվածքներ, կարող են օգտագործել «#[non_exhaustive]»՝ նշելու այն կառույցները, որոնք կարող են ապագայում նոր դաշտեր ավելացնել: Մինչ այժմ, այս իրավիճակում, ծրագրավորողը ստիպված էր ընտրություն կատարել դաշտերը մասնավոր հայտարարելու և դաշտերի անփոփոխ ցանկին պարտադիր լինելու միջև: Նոր հատկանիշը վերացնում է այս սահմանափակումը և թույլ է տալիս ապագայում ավելացնել նոր դաշտեր՝ առանց նախկինում կազմված արտաքին կոդը կոտրելու վտանգի։ Արկղային փաթեթներում «համապատասխանում» բաժնում ընտրանքները համընկնելիս անհրաժեշտ է «_ => {...}» դիմակի հստակ սահմանումը, որը ծածկում է ապագա հնարավոր դաշտերը, հակառակ դեպքում նոր դաշտեր ավելացնելիս սխալ կցուցադրվի:
  • Ավելացված է ընթացակարգային մակրո mac!() տիպի համատեքստում զանգահարելու ունակություն: Օրինակ, այժմ կարող եք գրել «type Foo = expand_to_type!(bar);», եթե «expand_to_type»-ը ընթացակարգային մակրո է:
  • «արտաքին { ... }» բլոկներում ավելացրել է ընթացակարգային և վերագրելու մակրոներ, ներառյալ «bang!()» մակրոները, օրինակ՝

    մակրո_կանոններ! make_item { ($name:ident) => {fn $name(); } }

    արտաքին {
    make_item!(ալֆա);
    make_item!(բետա);
    }

    արտաքին «C» {
    #[my_identity_macro] fn foo ();
    }

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

Source: opennet.ru

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