Linux-ի միջուկի patches-ի երրորդ հրատարակությունը Rust լեզվի աջակցությամբ

Միգել Օջեդան՝ Rust-for-Linux նախագծի հեղինակը, առաջարկել է երրորդ բաղադրիչ տարբերակ՝ Rust լեզվով սարքերի դրայվերների մշակման համար, որպեսզի քննարկեն Linux միջուկի մշակողները: Rust-ի աջակցությունը համարվում է փորձնական, բայց արդեն համաձայնեցված է linux-next ճյուղում ընդգրկվելու համար: Մշակումը ֆինանսավորվում է Google-ի և ISRG-ի (Internet Security Research Group) կողմից, որը Let's Encrypt նախագծի հիմնադիրն է և նպաստում է HTTPS-ին և ինտերնետի անվտանգության բարելավման տեխնոլոգիաների զարգացմանը:

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

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

Կարկատանների նոր տարբերակը շարունակում է վերացնել պատչերի առաջին և երկրորդ տարբերակների քննարկման ժամանակ արված մեկնաբանությունները։ Առավել նկատելի փոփոխությունները.

  • Անցում է կատարվել Rust 1.57-ի կայուն թողարկումն օգտագործելու համար որպես հղում կազմող, և տրամադրվել է հղում Rust 2021 լեզվի կայունացված հրատարակությանը: Նախկինում patches-ը կապված էր Rust-ի բետա ճյուղի հետ և օգտագործում էր որոշ լեզվական առանձնահատկություններ, որոնք դասակարգվել են որպես անկայուն: Rust 2021 բնութագրին անցումը թույլ տվեց մեզ սկսել աշխատանք՝ խուսափելու համար այնպիսի անկայուն գործառույթների օգտագործումից, ինչպիսիք են const_fn_transmute, const_panic, const_unavailable_unchecked և core_panic և try_reserve:
  • Կարկատաններում ներառված Rust գրադարանի alloc տարբերակի մշակումը շարունակվել է, որը փոփոխվել է՝ հիշողության տեղաբաշխման գործառույթները ազատելու «խուճապի» վիճակի հնարավոր առաջացումից, երբ սխալներ են տեղի ունենում, օրինակ՝ հիշողության բացակայությունը: Նոր տարբերակն իրականացնում է «no_rc» և «no_sync» տարբերակները՝ անջատելու միջուկի Rust կոդի մեջ չօգտագործված ֆունկցիոնալությունը՝ գրադարանը դարձնելով ավելի մոդուլային: Աշխատանքը շարունակվում է հիմնական հատկացում մշակողների հետ՝ ուղղված միջուկի համար անհրաժեշտ փոփոխությունները հիմնական գրադարան տեղափոխելուն: «no_fp_fmt_parse» տարբերակը, որն անհրաժեշտ է գրադարանի միջուկի մակարդակում աշխատելու համար, տեղափոխվել է Rust բազային գրադարան (միջուկ):
  • Կոդը մաքրվել է՝ CONFIG_WERROR ռեժիմում միջուկը կառուցելիս կոմպիլյատորի հնարավոր նախազգուշացումներից ազատվելու համար: Rust-ում կոդը կառուցելիս միացված են լրացուցիչ կոմպիլյատորների ախտորոշման ռեժիմները և Clippy linter նախազգուշացումները:
  • Աբստրակցիաները առաջարկվում են Rust կոդի օգտագործման համար seqlocks-ի (հաջորդականության կողպեքներ), էներգիայի կառավարման համար հետադարձ զանգերի, I/O հիշողության (readX/writeX), ընդհատումների և թելերի մշակման համար, GPIO, սարքերի, դրայվերների և հավատարմագրերի հասանելիության համար:
  • Վարորդների մշակման գործիքներն ընդլայնվել են՝ ներառելով տեղափոխելի մուտեքսներ, բիթերի կրկնիչներ, պարզեցված ցուցիչի կապեր, սխալների բարելավված ախտորոշում և տվյալների ավտոբուսից անկախ ենթակառուցվածք:
  • Բարելավված աշխատանքը հղումների հետ՝ օգտագործելով պարզեցված Ref տիպը՝ հիմնված refcount_t backend-ի վրա, որն օգտագործում է նույնանուն միջուկի API հղումները հաշվելու համար: Ստանդարտ հատկացումների գրադարանում տրամադրված Arc և Rc տեսակների աջակցությունը հեռացվել է և հասանելի չէ միջուկի մակարդակում գործարկված կոդով (ընտրանքներ են պատրաստվել հենց գրադարանի համար, որոնք անջատում են այս տեսակները):
  • Կարկատները ներառում են PL061 GPIO վարորդի տարբերակը, որը վերագրված է Rust-ով: Վարորդի հատուկ առանձնահատկությունն այն է, որ դրա իրականացումը գրեթե տող առ տող կրկնում է գոյություն ունեցող GPIO դրայվերը C լեզվով: Ծրագրավորողների համար, ովքեր ցանկանում են ծանոթանալ Rust-ում դրայվերների ստեղծմանը, պատրաստվել է տող առ տող համեմատություն, որը թույլ է տալիս հասկանալ, թե Rust-ում որ կոնստրուկտների է փոխակերպվում C կոդը։
  • Հիմնական Rust կոդերի բազան ընդունել է rustc_codegen_gcc, rustc backend-ը GCC-ի համար, որն իրականացնում է ժամանակից շուտ (AOT) կոմպիլացիա՝ օգտագործելով libgccjit գրադարանը: Backend-ի պատշաճ մշակման դեպքում այն ​​թույլ կտա ձեզ հավաքել միջուկում ներգրավված Rust կոդը՝ օգտագործելով GCC:
  • Բացի ARM-ից, Google-ից և Microsoft-ից, Red Hat-ը ցանկություն է հայտնել օգտագործել Rust լեզուն Linux միջուկում: Հիշեցնենք, որ Google-ն ուղղակիորեն աջակցություն է տրամադրում Rust for Linux նախագծին, մշակում է Rust-ում Binder միջգործընթացային հաղորդակցման մեխանիզմի նոր ներդրում և դիտարկում է Rust-ում տարբեր դրայվերների վերամշակման հնարավորությունը: Microsoft-ը սկսել է Hyper-V-ի վարորդների ներդրումը Rust-ում: ARM-ն աշխատում է բարելավել Rust-ի աջակցությունը ARM-ի վրա հիմնված համակարգերի համար: IBM-ն ներդրել է Rust-ի աջակցություն PowerPC համակարգերի միջուկում:

Source: opennet.ru

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