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

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

Նոր տարբերակում.

  • Գործիքակազմը և բաշխման գրադարանի տարբերակը, որը զերծ է «խուճապային» վիճակի հնարավոր առաջացումից, երբ տեղի են ունենում սխալներ, թարմացվել են Rust 1.62-ի թողարկման համար: Նախկինում օգտագործված տարբերակի համեմատ՝ Rust գործիքակազմը կայունացրել է միջուկի պատչերում օգտագործվող const_fn_trait_bound գործառույթի աջակցությունը:
  • Պարտադիր ծածկագիրը բաժանված է առանձին տուփի «կապերի» մեջ, որը հեշտացնում է վերակառուցումը, եթե փոփոխությունները կատարվում են միայն հիմնական փաթեթի «միջուկում»:
  • Մակրո «concat_idents!»-ի իրականացում: վերագրված է ընթացակարգային մակրոյի տեսքով, որը կապված չէ concat_idents ֆունկցիոնալության հետ և թույլ է տալիս օգտագործել հղումներ տեղական փոփոխականներին:
  • «static_assert!» մակրոն վերաշարադրվել է՝ թույլ տալով օգտագործել «core::assert!()»-ը ցանկացած համատեքստում՝ հաստատունների փոխարեն:
  • Մակրո «build_error!» հարմարեցված է աշխատելու, երբ մոդուլների համար սահմանված է «RUST_BUILD_ASSERT_{WARN, ALLOW}» ռեժիմը:
  • Ավելացվեց առանձին ֆայլ «kernel/configs/rust.config» կարգավորումներով:
  • Մակրո փոխարինումներում մշակված «*.i» ֆայլերը վերանվանվել են «*.rsi»:
  • Rust բաղադրիչների կառուցման աջակցությունը C կոդի համար օգտագործվողներից տարբերվող օպտիմալացման մակարդակներով դադարեցվել է:
  • Ավելացվեց fs մոդուլ, որն ապահովում է կապեր ֆայլային համակարգերի հետ աշխատելու համար: Տրվում է Rust-ով գրված պարզ ֆայլային համակարգի օրինակ:
  • Ավելացվել է աշխատանքային հերթի մոդուլ՝ համակարգային հերթերի հետ աշխատելու համար (ապահովում է կապեր work_struct և workqueue_struct միջուկի կառուցվածքների վրա):
  • kasync մոդուլի մշակումը շարունակվել է ասինխրոն ծրագրավորման մեթոդների ներդրմամբ (async): Ավելացվեց Rust-ով գրված հիմնական մակարդակի TCP սերվերի օրինակ:
  • Ավելացրել է Rust լեզվով ընդհատումները կարգավորելու հնարավորությունը՝ օգտագործելով [Threaded]Handler տեսակները և [Threaded]Registration՝ տեսակները:
  • Ավելացվեց ընթացակարգային մակրո «#[vtable]»՝ գործառույթների ցուցիչների աղյուսակների հետ աշխատելը հեշտացնելու համար, օրինակ՝ file_operations կառուցվածքը:
  • Ավելացվեց երկկողմանի կապակցված ցուցակների իրականացում «unsafe_list::List»:
  • Ավելացվեց նախնական աջակցություն RCU-ի (Կարդալ-պատճենել-թարմացում) և Պահակային տիպի համար՝ ստուգելու, թե արդյոք ընթերցման կողպեքը կապված է ընթացիկ շղթայի հետ:
  • Ավելացվեց Task::spawn() ֆունկցիան՝ միջուկի թելեր ստեղծելու և ավտոմատ սկսելու համար: Նաև ավելացրել է Task::wake_up() մեթոդը։
  • Ավելացվեց հետաձգման մոդուլ, որը թույլ է տալիս օգտագործել ուշացումներ (փաթաթել msleep()-ի վրա):

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

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

Source: opennet.ru

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