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

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

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

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

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

  • Ավելացված է աջակցություն ընդհանուր առնչվող տիպերի համար (GAT, Generic Associated Types), որոնք հնարավորություն են տալիս ստեղծել տիպային անուններ, որոնք կապված են մեկ այլ տեսակի հետ և թույլ են տալիս կապել տիպի կոնստրուկտորները հատկանիշների հետ: հատկանիշ Foo { type Bar<'x>; }
  • «Թող ... ուրիշ» արտահայտությունը ներդրվել է, որը թույլ է տալիս ստուգել օրինաչափության համապատասխանության պայմանը անմիջապես «let» արտահայտության ներսում և գործարկել կամայական կոդը, եթե օրինաչափությունը չի համընկնում: թող Ok(count) = u64::from_str(count_str) else { panic!("Չի կարող վերլուծել ամբողջ թիվը. '{count_str}'"); };
  • Թույլատրել ընդմիջման հայտարարության օգտագործումը անվանակոչված բլոկներից ժամանակից շուտ դուրս գալու համար՝ օգտագործելով բլոկի անունը (պիտակը)՝ որոշելու դադարեցվող բլոկը: let result = 'block: {do_thing(); if condition_not_met() { break 'block 1; } do_next_thing(); if condition_not_met() { break 'block 2; } do_last_thing(); 3};
  • Linux-ի համար ավելացվել է վրիպազերծման տեղեկատվությունը առանձին պահելու հնարավորությունը (split-debuginfo), որը նախկինում հասանելի էր միայն macOS պլատֆորմի համար։ «-Csplit-debuginfo=unpacked» տարբերակը նշելիս DWARF ձևաչափով վրիպազերծման տվյալները կպահվեն մի քանի առանձին օբյեկտային ֆայլերում՝ «.dwo» ընդլայնմամբ: Նշելով «-Csplit-debuginfo=packed»-ը, կստեղծվի մեկ փաթեթ «.dwp» ձևաչափով, որը ներառում է նախագծի բոլոր debuginfo տվյալները: Debuginfo-ն ուղղակիորեն ELF օբյեկտների .debug_* բաժնում ինտեգրելու համար կարող եք օգտագործել «-Csplit-debuginfo=off» տարբերակը:
  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ մեթոդները և հատկությունների իրականացումը կայունացվել են.
    • std::backtrace::Backtrace
    • Կապված::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • «const» հատկանիշը, որը որոշում է այն ցանկացած համատեքստում օգտագործելու հնարավորությունը հաստատունների փոխարեն, օգտագործվում է <*const T&>::offset_from և <*mut T>::offset_from ֆունկցիաներում:
  • Որպես LSP (Լեզվի սերվերի արձանագրություն) պրոտոկոլի ներդրումը ժանգի անալիզատորին փոխանցելու վերջին փուլի մաս, Rust Language Server-ի (RLS) հնացած իրականացումը փոխարինվել է կոճղային սերվերով, որը նախազգուշացում է տալիս՝ անցնելու առաջարկով: օգտագործելով ժանգը-անալիզատոր:
  • Կազմման ընթացքում միացված է MIR միջանկյալ կոդի inline տեղակայման աջակցությունը, որն արագացնում է տիպիկ crate փաթեթների հավաքումը 3-10%-ով:
  • Պլանավորված կառուցումները արագացնելու համար Cargo փաթեթի մենեջերը ապահովում է աշխատանքների տեսակավորում, որոնք սպասում են կատարմանը հերթում:

Բացի այդ, դուք կարող եք նշել հարցազրույցը Volvo-ում Rust լեզվի օգտագործման մասին ավտոմոբիլային տեղեկատվական համակարգերի բաղադրիչներ մշակելու համար: Rust-ում գոյություն ունեցող և փորձարկված ծածկագիրը վերաշարադրելու պլաններ չկան, սակայն նոր կոդի համար Rust-ը ավելի ցածր գնով որակը բարելավելու նախընտրելի տարբերակներից է: Rust լեզվի օգտագործման հետ կապված աշխատանքային խմբեր են ստեղծվել նաև AUTOSAR (AUTomotive Open System ARchitecture) և SAE (Automotive Engineers Society) ավտոմոբիլային ասոցիացիաներում:

Բացի այդ, Google-ի ինժեներական գծով փոխնախագահ Դեյվիդ Կլայդերմախերը խոսեց Android պլատֆորմում օգտագործվող կոդի թարգմանության մասին՝ գաղտնագրման բանալիները Rust-ի մեջ կառավարելու համար, ինչպես նաև Rust-ի օգտագործման մասին DNS-ը HTTPS-ի միջոցով պրոտոկոլի վրա փաթեթում: UWB- չիպերի համար (Ultra-Wideband) և վիրտուալացման շրջանակում (Android Virtualization Framework)՝ կապված Tensor G2 չիպի հետ: «Bluetooth»-ի և «Wi-Fi»-ի նոր կույտեր, որոնք վերագրված են Rust-ով, նույնպես մշակվում են Android-ի համար: Ընդհանուր ռազմավարությունն է՝ աստիճանաբար ուժեղացնել անվտանգությունը, նախ՝ ամենախոցելի և կենսական ծրագրային բաղադրիչները Rust-ի փոխակերպելով, այնուհետև ընդլայնելով այլ հարակից ենթահամակարգեր: Անցյալ տարի Rust լեզուն ներառվել է Android պլատֆորմի մշակման համար թույլատրված լեզուների ցանկում։

Source: opennet.ru

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