Առաջարկ՝ Linux-ի միջուկում Rust մշակման գործիքների ավելացման հարցը քննարկելու համար

Նիկ Դեզանիեր (Նիկ Դեզոլնիերս), ով աշխատում է Google-ում՝ տրամադրելու համար աջակցություն Linux միջուկի կառուցում Clang կոմպիլյատորի միջոցով և նաև օգնելով ուղղել Rust կոմպիլյատորի սխալները, Առաջարկվում է անցկացնել համաժողովում Linux Plumbers Conference 2020 նիստ՝ քննարկելու Rust-ում միջուկի բաղադրիչների մշակման հնարավորությունը: Նիկը կազմակերպում է միկրոկոնֆերանս՝ նվիրված LLVM-ին և կարծում է, որ լավ կլիներ քննարկել Rust-ի աջակցության միջուկում հնարավոր ինտեգրման տեխնիկական ասպեկտները (նա արդեն պատրաստել է KBuild-ի աշխատանքային նախատիպը) և հասկանալ՝ արդյոք նման աջակցությունը պետք է։ ընդհանրապես ավելացվի, և Rust-ի օգտագործման ինչ սահմանափակումներ պետք է ընդունվեն:

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

  • «Ձուկը տակառում» ընկերության մշակողները подготовили Linux միջուկի համար Rust լեզվով բեռնվող մոդուլներ գրելու գործիքակազմ՝ օգտագործելով վերացական շերտերի մի շարք միջերեսների և միջուկի կառուցվածքների վրա՝ անվտանգությունը բարձրացնելու համար: Շերտերն ավտոմատ կերպով ստեղծվում են միջուկի վերնագրի առկա ֆայլերի հիման վրա՝ օգտագործելով կոմունալ ծրագիրը bindingen. Clang-ը օգտագործվում է շերտեր կառուցելու համար: Բացի միջշերտերից, հավաքված մոդուլներն օգտագործում են staticlib փաթեթը:
  • Հոնկոնգի չինական համալսարանի գիտնականները զարգացնել Rust-ում ներկառուցված համակարգերի և իրերի ինտերնետ սարքերի համար դրայվերների մշակման նախագիծ, որն օգտագործում է նաև bindgen-ը՝ միջուկի վերնագրի ֆայլերի վրա հիմնված շերտեր ստեղծելու համար: Շրջանակը թույլ է տալիս բարելավել վարորդի անվտանգությունը՝ առանց միջուկում փոփոխություններ կատարելու. միջուկում դրայվերների համար լրացուցիչ մեկուսացման մակարդակներ ստեղծելու փոխարեն, առաջարկվում է արգելափակել խնդիրները կոմպիլյացիայի փուլում՝ օգտագործելով առավել անվտանգ Rust լեզուն: Ենթադրվում է, որ նման մոտեցումը կարող է պահանջված լինել սարքավորումներ արտադրողների կողմից, որոնք շտապում են սեփական վարորդներ մշակել առանց պատշաճ աուդիտ անցկացնելու:
  • Շրջանակային մշակողներ C2Rust C կոդը Rust-ին հեռարձակելու համար, վարք փորձեր միջուկի մոդուլների փոխակերպման վերաբերյալ նվազագույն ձեռքով խմբագրումներով: Նշված խնդիրներից մեկը կոդի միջուկի շատ մասերում օգտագործումն է, որն օգտագործում է GCC ընդլայնումներ, որոնք դեռ չեն աջակցվում C2Rust-ում: Այս խնդիրը լուծելու համար C2Rust-ը նախատեսում է աջակցություն ավելացնել GCC ատրիբուտներին inline, cold, alias, used և section, ինչպես նաև ընդլայնել inline assembler-ի հնարավորությունները և լուծել խնդիրներ կառուցվածքների հետ, որոնք և՛ հավասարեցված են, և՛ փաթեթավորված (օրինակ, xregs_state) . Ձեռքով աշխատանք պահանջող զգալի խնդիրները ներառում են ոչ տրիվիալ C մակրոները Rust մակրոների թարգմանելու անկարողությունը և տեսակները վերասահմանելու անհրաժեշտությունը, քանի որ C2Rust-ը C տիպերը թարգմանում է սահմանումների libc փաթեթում, բայց այս փաթեթը չի կարող օգտագործվել միջուկի մոդուլներում:

Source: opennet.ru

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