Rust 1.75 և unikernel Hermit 0.6.7 ծրագրավորման լեզվի թողարկում:

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

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

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

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

  • Ավելացրել է «async fn» և «->impl Trait» նշումը մասնավոր հատկություններում օգտագործելու հնարավորությունը: Օրինակ, օգտագործելով «->impl Trait»-ը կարող եք գրել հատկանիշի մեթոդ, որը վերադարձնում է կրկնող. հատկանիշ Container { fn items(&self) -> impl Iterator; } impl Container for MyContainer { fn items(&self) -> impl Iterator {self.items.iter().cloned() } }

    Դուք կարող եք նաև ստեղծել հատկանիշներ՝ օգտագործելով «async fn»: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // կընդլայնվի հետևյալով. // fn fetch(&self, url: Url) -> impl Future; }

  • Ավելացվեց API՝ ցուցիչների նկատմամբ բայթերի հաշվանցումները հաշվարկելու համար: Մերկ ցուցիչների հետ աշխատելիս («*const T» և «*mut T»), կարող են պահանջվել ցուցիչին օֆսեթ ավելացնելու գործողություններ: Նախկինում դրա համար հնարավոր էր օգտագործել «::add(1)» տիպի կոնստրուկցիան՝ ավելացնելով «size_of::()»-ի չափին համապատասխան բայթերի քանակը։ Նոր API-ն պարզեցնում է այս գործողությունը և հնարավորություն է տալիս մանիպուլյացիայի ենթարկել բայթերի օֆսեթները՝ առանց նախապես տիպերը փոխանցելու «*const u8» կամ «*mut u8»:
    • ցուցիչ::byte_add
    • ցուցիչ::byte_offset
    • ցուցիչ::byte_offset_from
    • ցուցիչ::byte_sub
    • ցուցիչ::wrapping_byte_add
    • ցուցիչ::wrapping_byte_offset
    • ցուցիչ::wrapping_byte_sub
  • Շարունակվել է աշխատանքը rustc կոմպիլյատորի արդյունավետությունը բարձրացնելու համար: Ավելացվեց BOLT օպտիմիզատորը, որն աշխատում է հետհղման փուլում և օգտագործում է տեղեկատվություն նախապես պատրաստված կատարման պրոֆիլից: BOLT-ի օգտագործումը թույլ է տալիս արագացնել կոմպիլյատորների աշխատանքը մոտ 2%-ով՝ փոխելով librustc_driver.so գրադարանի կոդը՝ պրոցեսորի քեշի ավելի արդյունավետ օգտագործման համար:

    Ներառված է rustc կոմպիլյատորի կառուցում «-Ccodegen-units=1» տարբերակով՝ LLVM-ում օպտիմալացման որակը բարելավելու համար: Կատարված թեստերը ցույց են տալիս կատարողականի աճ «-Ccodegen-units=1» կառուցվածքի դեպքում մոտավորապես 1.5%-ով: Ավելացված օպտիմալացումները լռելյայն միացված են միայն x86_64-unknown-linux-gnu հարթակի համար:

    Նախկինում նշված օպտիմալացումները փորձարկվել են Google-ի կողմից՝ Rust-ով գրված Android պլատֆորմի բաղադրիչների կառուցման ժամանակը նվազեցնելու համար: Android-ի կառուցման ժամանակ «-C codegen-units=1»-ի օգտագործումը մեզ թույլ տվեց կրճատել գործիքակազմի չափը 5.5%-ով և բարձրացնել դրա կատարումը 1.8%-ով, մինչդեռ գործիքակազմի ստեղծման ժամանակը գրեթե կրկնապատկվեց:

    Հղման ժամանակի աղբի հավաքման ակտիվացումը («--gc-sections») բերեց արդյունավետության բարձրացում մինչև 1.9%, հնարավորություն տալով կապի ժամանակի օպտիմալացումը (LTO) մինչև 7.7%, իսկ պրոֆիլի վրա հիմնված օպտիմալացումը (PGO) մինչև 19.8%: Ի վերջո, օպտիմալացումները կիրառվեցին BOLT կոմունալ ծրագրի միջոցով, որը թույլ տվեց բարձրացնել կառուցման արագությունը մինչև 24.7%, բայց գործիքակազմի չափն ավելացավ 10.9% -ով:

    Rust 1.75 և unikernel Hermit 0.6.7 ծրագրավորման լեզվի թողարկում:

  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ մեթոդները և հատկությունների իրականացումը կայունացվել են.
    • Ատոմային*::from_ptr
    • FileTimes
    • FileTimesExt
    • Ֆայլ::set_modified
    • Ֆայլ::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Տարբերակ::as_slice
    • Տարբերակ::as_mut_slice
    • ցուցիչ::byte_add
    • ցուցիչ::byte_offset
    • ցուցիչ::byte_offset_from
    • ցուցիչ::byte_sub
    • ցուցիչ::wrapping_byte_add
    • ցուցիչ::wrapping_byte_offset
    • ցուցիչ::wrapping_byte_sub
  • «const» հատկանիշը, որը որոշում է այն ցանկացած համատեքստում օգտագործելու հնարավորությունը հաստատունների փոխարեն, օգտագործվում է գործառույթներում.
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • ԳուցեՄիասնական::zeroed
    • mem::խտրական
    • mem::զրոյացված
  • Աջակցության երրորդ մակարդակն իրականացվել է csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd և mipsel-unknown-netbsd հարթակների համար: Երրորդ մակարդակը ներառում է հիմնական աջակցություն, բայց առանց ավտոմատացված թեստավորման, պաշտոնական կառուցումների հրապարակման կամ ստուգելու, թե արդյոք կոդը կարելի է կառուցել:

Բացի այդ, մենք կարող ենք նշել Hermit նախագծի նոր տարբերակը, որը մշակում է մասնագիտացված միջուկ (unikernel), որը գրված է Rust լեզվով, որը տրամադրում է գործիքներ ինքնամփոփ հավելվածներ ստեղծելու համար, որոնք կարող են աշխատել հիպերվիզորի կամ մերկ սարքաշարի վրա՝ առանց լրացուցիչ շերտերի։ և առանց օպերացիոն համակարգի: Կառուցվելիս հավելվածը ստատիկորեն կապված է գրադարանի հետ, որն ինքնուրույն իրականացնում է բոլոր անհրաժեշտ գործառույթները՝ առանց կապվելու OS միջուկի և համակարգի գրադարանների հետ: Ծրագրի կոդը բաշխվում է Apache 2.0 և MIT լիցենզիաների ներքո: Ասամբլեան աջակցվում է Rust, Go, Fortran, C և C++ լեզուներով գրված հավելվածների ինքնուրույն կատարման համար: Նախագիծը նաև մշակում է իր սեփական bootloader-ը, որը թույլ է տալիս գործարկել Hermit-ը՝ օգտագործելով QEMU և KVM:

Source: opennet.ru

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