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

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

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

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

  • Տողերի ձևաչափման բլոկներում, ի լրումն տողից հետո բացահայտ թվարկված փոփոխականները փոխարինելու հնարավորությանը, իրականացվում է կամայական նույնացուցիչները փոխարինելու հնարավորությունը՝ ավելացնելով «{identifier}» արտահայտությունը տողում: Օրինակ՝ // Նախկինում աջակցվող կոնստրուկցիաներ՝ println!("Բարև, {}!", get_person()); println!("Բարև, {0}!", get_person()); println!("Բարև, {person}!", person = get_person()); // այժմ կարող եք նշել let person = get_person(); println! («Բարև, {person}!»);

    Նույնացուցիչները կարող են նաև ուղղակիորեն նշվել ձևաչափման տարբերակներում: թող (լայնություն, ճշգրտություն) = get_format(); համար (անուն, միավոր) get_scores() {println!("{name}: {score:width$.precision$}"); }

    Նոր փոխարինումը գործում է բոլոր մակրոներում, որոնք աջակցում են լարային ձևաչափի սահմանմանը, բացառությամբ «խուճապի»: Rust լեզվի 2015 և 2018 տարբերակներում, որոնցում խուճապը («{ident}») դիտվում է որպես սովորական տող (Rust 2021-ում փոխարինումն աշխատում է):

  • Windows պլատֆորմի վրա std::process::Command կառուցվածքի վարքագիծը փոխվել է այնպես, որ հրամաններ կատարելիս, անվտանգության նկատառումներից ելնելով, այն այլևս չի փնտրում գործարկվող ֆայլեր ընթացիկ գրացուցակում: Ընթացիկ գրացուցակը բացառված է, քանի որ այն կարող է օգտագործվել վնասակար կոդ գործարկելու համար, եթե ծրագրերը գործարկվեն անվստահելի գրացուցակներում (CVE-2021-3013): Գործարկվող հայտնաբերման նոր տրամաբանությունը ներառում է Rust դիրեկտորիաների, հավելվածների գրացուցակի, Windows համակարգի գրացուցակի և PATH միջավայրի փոփոխականում նշված դիրեկտորիաների որոնումը:
  • Ստանդարտ գրադարանն ընդլայնել է «#[must_use]» նշված գործառույթների քանակը՝ նախազգուշացում տալու համար, եթե վերադարձվող արժեքը անտեսվում է, ինչը օգնում է բացահայտել սխալները, որոնք առաջացել են՝ ենթադրելով, որ ֆունկցիան փոխելու է արժեքները, այլ ոչ թե նոր արժեք վերադարձնելու:
  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ մեթոդները և հատկությունների իրականացումը կայունացվել են.
    • Մետատվյալներ::is_symlink
    • Ճանապարհ::is_symlink
    • {integer}::saturating_div
    • Տարբերակ::unwrap_unchecked
    • Արդյունք::unwrap_unchecked
    • Արդյունք::unwrap_err_unchecked
  • «const» հատկանիշը, որը որոշում է այն ցանկացած համատեքստում օգտագործելու հնարավորությունը հաստատունների փոխարեն, օգտագործվում է գործառույթներում.
    • Տևողությունը՝:նոր
    • Տևողությունը՝:checked_add
    • Տևողությունը՝:հագեցած_ավելացնել
    • Տևողությունը՝:ստուգված_ենթակետ
    • Տևողությունը՝:հագեցած_ենթ
    • Տևողությունը՝:checked_mul
    • Տևողությունը՝:հագեցած_մուլ
    • Տևողությունը՝:checked_div
  • Թույլատրվում է «*const T» ցուցիչների անջատումը «const» համատեքստերում:
  • Cargo փաթեթների կառավարիչում rust_version դաշտը ավելացվել է փաթեթի մետատվյալներին, իսկ «--հաղորդագրություն-ֆորմատ» տարբերակը՝ «cargo install» հրամանին:
  • Կազմողն ապահովում է CFI (Control Flow Integrity) պաշտպանության մեխանիզմը, որն ավելացնում է ստուգումներ յուրաքանչյուր անուղղակի զանգից առաջ՝ հայտնաբերելու չսահմանված վարքագծի որոշ ձևեր, որոնք կարող են հանգեցնել նորմալ կատարման կարգի (վերահսկման հոսքի) խախտմանը: շահագործումների օգտագործում, որոնք փոխում են գործառույթների հիշողության մեջ պահվող ցուցիչները:
  • Կազմողն ավելացրել է աջակցություն LLVM ծածկույթի համեմատման ձևաչափի 5-րդ և 6-րդ տարբերակների համար, որոնք օգտագործվում են թեստավորման ընթացքում կոդերի ծածկույթը գնահատելու համար:
  • Կազմողում LLVM-ի նվազագույն տարբերակի պահանջները բարձրացվում են մինչև LLVM 12:
  • Իրականացվել է x86_64-unknown-none պլատֆորմի աջակցության երրորդ մակարդակը: Երրորդ մակարդակը ներառում է հիմնական աջակցություն, բայց առանց ավտոմատացված թեստավորման, պաշտոնական կառուցումների հրապարակման կամ ստուգելու, թե արդյոք կոդը կարելի է կառուցել:

Բացի այդ, մենք կարող ենք նշել Microsoft-ի կողմից Rust-ի թողարկման հրապարակումը Windows 0.30 գրադարանների համար, որոնք թույլ են տալիս օգտագործել Rust լեզուն Windows ՕՀ-ի համար հավելվածներ մշակելու համար: Հավաքածուն ներառում է երկու crate փաթեթներ (windows և windows-sys), որոնց միջոցով կարող եք մուտք գործել Win API Rust ծրագրերում: API-ի աջակցության կոդը ստեղծվում է դինամիկ կերպով API-ը նկարագրող մետատվյալներից, ինչը թույլ է տալիս աջակցություն իրականացնել ոչ միայն գոյություն ունեցող Win API զանգերի, այլև ապագայում հայտնվող զանգերի համար: Նոր տարբերակը ավելացնում է աջակցություն UWP (Universal Windows Platform) թիրախային հարթակին և իրականացնում Handle և Debug տեսակները:

Source: opennet.ru

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