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

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

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

  • Գործիքների հավաքածուն և բաշխման գրադարանի տարբերակը, որոնք ազատվել են «խուճապի» վիճակի հնարավոր առաջացումից, երբ տեղի են ունենում սխալներ, թարմացվել են Rust 1.60-ի թողարկմանը, որը կայունացնում է միջուկի կարկատաններում օգտագործվող «maybe_uninit_extra» ռեժիմի աջակցությունը:
  • Ավելացվեց փաստաթղթերից թեստեր գործարկելու հնարավորությունը (թեստեր, որոնք օգտագործվում են նաև որպես օրինակներ փաստաթղթերում), միջուկի API-ի հետ կապված թեստերի կոմպիլյացիայի ժամանակի փոխակերպման միջոցով միջուկի բեռնման ընթացքում կատարված KUnit թեստերի:
  • Ընդունվել են պահանջներ, որոնց համաձայն՝ թեստերը չպետք է հանգեցնեն Clippy-ի լիսեռի նախազգուշացմանը, ինչպես Rust միջուկի կոդը:
  • Առաջարկվում է ցանցային գործառույթներով «ցանց» մոդուլի նախնական ներդրում: Rust կոդը հասանելի է միջուկի ցանցային կառույցներին, ինչպիսիք են Անվանատարածքները (հիմնված struct ցանցի միջուկի կառուցվածքի վրա), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct_in equidents) և դրանց IPV6: .
  • Նախնական աջակցություն կա ասինխրոն ծրագրավորման տեխնիկայի (async) համար, որն իրականացվում է kasync մոդուլի տեսքով: Օրինակ՝ կարող եք ասինխրոն կոդ գրել TCP վարդակները շահարկելու համար. async fn echo_server(stream՝ TcpStream) -> Result { let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf).սպասել?; եթե n == 0 {վերադարձնել Ok(()); } հոսք.գրել_բոլորը(&buf[..n]).սպասել?; } }
  • Ավելացվեց net::filter մոդուլը ցանցային փաթեթների ֆիլտրերի մանիպուլյացիայի համար: Ավելացվեց rust_netfilter.rs-ի օրինակ՝ Rust լեզվով ֆիլտրի ներդրմամբ:
  • Ավելացվեց պարզ mutex smutex::Mutex-ի իրականացում, որը կապում չի պահանջում:
  • Ավելացվեց NoWaitLock-ը, որը երբեք չի սպասում կողպեքի, և եթե այն զբաղված է մեկ այլ շղթայով, հանգեցնում է սխալի հաղորդմանը, երբ փորձում եք կողպեք ձեռք բերել զանգահարողին կանգնեցնելու փոխարեն:
  • Ավելացվեց RawSpinLock-ը, որը ճանաչվել է raw_spinlock_t-ով միջուկում, որպեսզի կիրառվի այն բաժիններին, որոնք չեն կարող անգործուն մնալ:
  • Ավելացվեց ARef տեսակը օբյեկտի հղումների համար, որի վրա կիրառվում է տեղեկանքների հաշվման մեխանիզմը (միշտ վերահաշվարկված):
  • Rustc_codegen_gcc backend-ը, որը թույլ է տալիս օգտագործել libgccjit գրադարանը GCC նախագծից որպես rustc-ում կոդերի գեներատոր՝ rustc-ին GCC-ում հասանելի ճարտարապետություններին և օպտիմալացումներին աջակցություն տրամադրելու համար, ներդրել է rustc կոմպիլյատորը բեռնաթափելու հնարավորությունը: Կոմպիլյատորի առաջխաղացումը նշանակում է rustc-ում GCC-ի վրա հիմնված կոդերի գեներատոր օգտագործելու հնարավորություն՝ ինքն իրեն rustc կոմպիլյատորը կառուցելու համար: Բացի այդ, GCC 12.1-ի վերջին թողարկումը ներառում է libgccjit-ի ուղղումներ, որոնք անհրաժեշտ են rustc_codegen_gcc-ի ճիշտ աշխատանքի համար: Նախապատրաստական ​​աշխատանքներ են տարվում rustc_codegen_gcc-ի տեղադրման հնարավորությունը ապահովելու համար rustup կոմունալ ծրագրի միջոցով:
  • Նշվում է GCC frontend gccrs-ի զարգացման առաջընթացը Rust լեզվի կոմպիլյատորի ներդրմամբ, որը հիմնված է GCC-ի վրա: Ներկայումս կան երկու լրիվ դրույքով մշակողներ, որոնք աշխատում են gccrs-ի վրա:

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

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

Source: opennet.ru

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