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

Հրապարակվել է Rust 1.57 համակարգի ծրագրավորման լեզվի թողարկումը, որը հիմնադրվել է Mozilla նախագծի կողմից, սակայն այժմ մշակվել է Rust Foundation անկախ ոչ առևտրային կազմակերպության հովանու ներքո։ Լեզուն կենտրոնանում է հիշողության անվտանգության վրա, ապահովում է հիշողության ավտոմատ կառավարում և ապահովում է առաջադրանքների բարձր զուգահեռականության հասնելու միջոցներ՝ առանց աղբի հավաքիչի կամ գործարկման ժամանակի (աշխատանքի ժամանակը կրճատվում է մինչև ստանդարտ գրադարանի հիմնական սկզբնավորումը և պահպանումը):

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

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

  • «Խուճապ» մակրոյի օգտագործումը կայունացվել է: կազմման ընթացքում ստեղծված համատեքստերում, ինչպիսիք են «const fn» հռչակագրերը: Բացի այդ, բացի «խուճապ» օգտագործելուց: const հայտարարագրերը թույլ են տալիս օգտագործել «assert!» մակրո: և մի քանի այլ ստանդարտ գրադարանային API-ներ: Կայունացումը դեռ չի ընդգրկում ֆորմատավորման ամբողջ ենթակառուցվածքը, ուստի իր ներկայիս ձևով «խուճապ» մակրո է կարող է օգտագործվել միայն ստատիկ տողերի հետ (panic!(“...”)) կամ մեկ ինտերպոլացված «&str» արժեքով փոխարինելիս (panic!(«{}», a)), որը պետք է սահմանափակվի «{» փոխարինելով: }" առանց ֆորմատավորման սպեցիֆիկատորների և այլ տեսակների: Ապագայում մակրոների կիրառելիությունը հաստատուն համատեքստերում կընդլայնվի, սակայն կայունացված հնարավորություններն արդեն բավարար են հավաքագրման փուլում հաստատման ստուգումներ կատարելու համար՝ const _: () = assert!(std::mem::size_of:: () == 64); const _: () = պնդել!(std::mem::size_of:: () == 8);
  • Cargo փաթեթի կառավարիչը թույլ է տալիս օգտագործել կամայական անուններով պրոֆիլներ, որոնք չեն սահմանափակվում «dev», «release», «test» և «bench»: Օրինակ, միացման փուլում (LTO) օպտիմիզացումը միացնելու համար միայն այն ժամանակ, երբ ստեղծվում են վերջնական արտադրանքի հավաքույթները, կարող եք Cargo.toml-ում ստեղծել «արտադրության» պրոֆիլ և դրան ավելացնել «lto = ճշմարիտ» դրոշակը: Այնուամենայնիվ, ձեր սեփական պրոֆիլները սահմանելիս դուք պետք է նշեք գոյություն ունեցող պրոֆիլը՝ նրանից կանխադրված կարգավորումները ժառանգելու համար: Ստորև բերված օրինակը ստեղծում է «արտադրության» պրոֆիլ, որը լրացնում է «թողարկման» պրոֆիլը՝ ներառելով «lto = ճշմարիտ» դրոշը: Պրոֆիլն ինքնին ակտիվանում է՝ «--profile production» տարբերակով բեռներ կանչելով, և հավաքման արտեֆակտները կտեղադրվեն «նպատակ/արտադրություն» գրացուցակում: [profile.production] inherits = «արձակում» lto = ճշմարիտ
  • Կայունացվել է try_reserve-ի օգտագործումը Vec, String, HashMap, HashSet և VecDeque տեսակների համար, ինչը թույլ է տալիս նախապես տարածք վերապահել տվյալ տեսակի որոշ տարրերի համար՝ նվազեցնելու հիշողության բաշխման գործողությունների հաճախականությունը և խուսափելու համար: աշխատանքի ընթացքում խափանում է հիշողության բացակայության պատճառով:
  • Թույլատրվում է նշել մակրոները գանգուր փակագծերով այնպիսի արտահայտություններում, ինչպիսիք են «m!{ .. }.method()» և «m!{ .. }»:
  • File::read_to_end և read_to_string ֆունկցիաների կատարումը օպտիմիզացված է:
  • Unicode-ի բնութագրերի աջակցությունը թարմացվել է մինչև 14.0 տարբերակ:
  • Ընդլայնվել է «#[must_use]» նշված գործառույթների քանակը՝ նախազգուշացում տալու համար, եթե վերադարձված արժեքը անտեսվում է, ինչը օգնում է բացահայտել սխալները, որոնք առաջացել են՝ ենթադրելով, որ ֆունկցիան փոխելու է արժեքները, այլ ոչ թե վերադարձնելու նոր արժեք:
  • Ավելացվեց փորձնական հետնամաս՝ libgccjit-ի միջոցով կոդի ստեղծման համար:
  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ մեթոդները և հատկությունների իրականացումը կայունացվել են.
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • հավաքածուներ::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • Տող::try_reserve
    • Տող::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Հրահանգ::get_program
    • Հրահանգ::get_args
    • Հրահանգ::get_envs
    • Հրահանգ::get_current_dir
    • CommandArgs
    • CommandEnvs
  • «const» հատկանիշը, որը որոշում է, թե արդյոք այն կարող է օգտագործվել ցանկացած համատեքստում՝ հաստատունների փոխարեն, օգտագործվում է hint::unreachable_unchecked ֆունկցիայի մեջ։
  • Աջակցության երրորդ մակարդակն իրականացվել է armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi և armv7a-km-ի համար: solid_asp3-eabihf հարթակներ: Երրորդ մակարդակը ներառում է հիմնական աջակցություն, բայց առանց ավտոմատացված թեստավորման, պաշտոնական կառուցումների հրապարակման կամ ստուգելու, թե արդյոք կոդը կարելի է կառուցել:

Source: opennet.ru

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