Linux nukleorako adabakien zortzigarren bertsioa Rust hizkuntzarako laguntzarekin

Miguel Ojedak, Rust-for-Linux proiektuaren egileak, Rust hizkuntzan gailu kontrolatzaileak garatzeko v8 osagaiak askatzea proposatu zuen Linux kerneleko garatzaileek kontuan izan ditzaten. Hau adabakien bertsio berritua da, lehen bertsioa kontuan hartuta, bertsio-zenbakirik gabe argitaratua. Rust euskarria esperimentaltzat jotzen da, baina dagoeneko linux-next adarrean sartuta dago, 5.20/6.0 udazkeneko bertsioan integratuta dagoela dio eta nahiko heldua da nukleoaren azpisistemen gainean abstrakzio-geruzak sortzeko lanean hasteko, baita kontrolatzaileak idazten ere. eta moduluak. Garapena Googlek eta ISRGk (Internet Security Research Group) finantzatzen dute, Let's Encrypt proiektuaren sortzailea dena eta HTTPS eta Interneteko segurtasuna hobetzeko teknologien garapena sustatzen du.

Bertsio berrian:

  • Tresna-kit eta alloc liburutegiaren aldaera bat, akatsak gertatzen direnean "izu-egoerarik" sortu gabe, Rust 1.62 bertsiorako eguneratu dira. Lehen erabilitako bertsioarekin alderatuta, Rust toolkit-ek nukleoaren adabakietan erabiltzen den const_fn_trait_bound funtzionalitaterako euskarria egonkortu du.
  • Lotura-kodea "bindings" pakete bereizi batean banatzen da, eta horrek berreraikitzea errazten du aldaketak "kernel" pakete nagusian bakarrik egiten badira.
  • "concat_idents!" makroaren ezarpena concat_idents funtzionalitateari lotuta ez dagoen eta aldagai lokalen erreferentziak erabiltzeko aukera ematen duen prozedura makro moduan berridatzi da.
  • β€œstatic_assert!” makroa berridatzi da, β€œcore::assert!()” edozein testuingurutan konstanteen ordez erabiltzeko aukera emanez.
  • Makroa "eraiki_errorea!" "RUST_BUILD_ASSERT_{WARN,ALOW}" modua moduluetarako ezarrita dagoenean lan egiteko egokituta dago.
  • Fitxategi bereizi bat gehitu da "kernel/configs/rust.config" ezarpenekin.
  • Makro-ordezkapenetan prozesatutako β€œ*.i” fitxategiei β€œ*.rsi” izena jarri zaie.
  • C kodearako erabiltzen diren optimizazio-maila desberdinak dituzten Rust osagaiak eraikitzeko laguntza eten egin da.
  • Fs modulua gehitu da, fitxategi-sistemekin lan egiteko loturak eskaintzen dituena. Rust-en idatzitako fitxategi-sistema sinple baten adibidea eskaintzen da.
  • Sistema-ilarekin lan egiteko workqueue modulua gehitu da (work_struct eta workqueue_struct kernel egituren gaineko loturak eskaintzen ditu).
  • kasync moduluaren garapenak programazio asinkronoko metodoen (async) ezarpenarekin jarraitu zuen. Rust-en idatzitako core-mailako TCP zerbitzari baten adibide bat gehitu da.
  • Rust hizkuntzan etenaldiak kudeatzeko gaitasuna gehitu da [Threaded]Handler motak eta [Threaded]Registration` motak erabiliz.
  • "#[vtable]" prozedura-makroa gehitu da funtzio erakusleen taulekin lan egitea errazteko, hala nola, file_operations egitura.
  • "Unsafe_list::List" zerrenden estekatutako noranzko bikoen inplementazioa gehitu da.
  • RCU (Irakurri-kopia-eguneratzea) eta Guard motaren hasierako euskarria gehitu da irakurketa-blokeoa uneko hariari lotua dagoen egiaztatzeko.
  • Task::spawn() funtzioa gehitu da nukleoaren hariak sortzeko eta automatikoki hasteko. Task::wake_up() metodoa ere gehitu du.
  • Atzerapen-modulu bat gehitu da, atzerapenak erabiltzeko aukera ematen duena (msleep()-en bilgarri bat).

Proposatutako aldaketek Rust bigarren hizkuntza gisa erabiltzea ahalbidetzen dute kontrolatzaileak eta nukleoaren moduluak garatzeko. Rust-en euskarria lehenespenez gaituta ez dagoen aukera gisa aurkezten da eta ez du eragiten Rust-a nukleorako beharrezko eraikitze-menpekotasunen artean sartzea. Rust kontrolatzaileak garatzeko erabiltzeak gidari seguruagoak eta hobeak sortzea ahalbidetuko du esfortzu minimoarekin, askatu ondoren memoria-eremu batera sartzeko, erakusle nuluak deserreferentziatu eta buffer gainditzeak bezalako arazorik gabe.

Memoria segurua den manipulazioa Rust-en eskaintzen da konpilazio garaian erreferentziak egiaztatzen, objektuen jabetzaren eta objektuaren bizitzaren (esparrua) jarraipena eginez, baita kodearen exekuzioan memoriarako sarbidearen zuzentasunaren ebaluazioaren bidez ere. Rust-ek osoko gainezkatzeen aurkako babesa eskaintzen du, erabili aurretik aldagaien balioak derrigorrezko hasieratzea eskatzen du, liburutegi estandarrean akatsak hobeto kudeatzen ditu, erreferentzia eta aldagai aldaezinen kontzeptua lehenespenez aplikatzen du, idazketa estatiko sendoa eskaintzen du akats logikoak minimizatzeko.

Iturria: opennet.ru

Gehitu iruzkin berria