Ẹya kẹfa ti awọn abulẹ fun ekuro Linux pẹlu atilẹyin ede Rust

Miguel Ojeda, onkọwe ti iṣẹ akanṣe Rust-for-Linux, dabaa itusilẹ ti awọn paati v6 fun idagbasoke awọn awakọ ẹrọ ni ede Rust fun imọran nipasẹ awọn olupilẹṣẹ ekuro Linux. Eyi ni ẹda keje ti awọn abulẹ, ni akiyesi ẹya akọkọ, ti a tẹjade laisi nọmba ẹya kan. Atilẹyin ipata ni a ka si esiperimenta, ṣugbọn o ti wa tẹlẹ ninu ẹka ti o tẹle linux ati pe o ti ni idagbasoke to lati bẹrẹ iṣẹ lori ṣiṣẹda awọn fẹlẹfẹlẹ abstraction lori awọn eto inu ekuro, ati awọn awakọ kikọ ati awọn modulu. Idagbasoke naa jẹ agbateru nipasẹ Google ati ISRG (Ẹgbẹ Iwadi Aabo Intanẹẹti), eyiti o jẹ oludasile iṣẹ akanṣe Let's Encrypt ati igbega HTTPS ati idagbasoke awọn imọ-ẹrọ lati mu aabo Intanẹẹti dara si.

Ninu ẹya tuntun:

  • Ohun elo irinṣẹ ati iyatọ ti ile-ikawe alloc, ti o ni ominira lati iran ti o ṣeeṣe ti ipo “ijaaya” nigbati awọn aṣiṣe ba waye, ti ni imudojuiwọn si itusilẹ ti Rust 1.60, eyiti o ṣeduro atilẹyin fun ipo “maybe_uninit_extra” ti a lo ninu awọn abulẹ ekuro.
  • Ṣe afikun agbara lati ṣiṣe awọn idanwo lati inu iwe (awọn idanwo ti o tun lo bi awọn apẹẹrẹ ninu iwe), nipasẹ iṣakojọ-akoko iyipada ti awọn idanwo ti a so si API ekuro sinu awọn idanwo KUnit ti a ṣe lakoko ikojọpọ kernel.
  • Awọn ibeere ti gba pe awọn idanwo ko yẹ ki o ja si ikilọ Clippy linter kan, gẹgẹ bi koodu ekuro Rust.
  • Ibẹrẹ imuse ti module “net” pẹlu awọn iṣẹ nẹtiwọọki ni a dabaa. Koodu ipata ni iraye si awọn ẹya nẹtiwọọki ekuro gẹgẹbi Namespace (da lori ilana kernel net struct), SkBuff (struct sk_buff), TcpListener, TcpStream (ibọ-iṣọkan igbekalẹ), Ipv4Addr (struct in_addr), SocketAddrV4 (sockaddr_6 igbekalẹ) ati IPsvXNUMX equivalent .
  • Atilẹyin akọkọ wa fun awọn ilana siseto asynchronous (async), ti a ṣe ni irisi module kasync. Fun apẹẹrẹ, o le kọ koodu asynchronous lati ṣe afọwọyi awọn sockets TCP: async fn echo_server(san: TcpStream) -> Abajade {let mut buf = [0u8; 1024]; lupu {jẹ ki n = stream.read (& mut buf) . duro ?; ti n == 0 {pada Ok(()); } stream.write_all (& buf [..n]) duro?; }}
  • Fi kun net :: Ajọ module fun ifọwọyi awọn asẹ soso nẹtiwọki. Ti ṣafikun apẹẹrẹ rust_netfilter.rs pẹlu imuse àlẹmọ ni ede Rust.
  • Fi kun imuse ti o rọrun mutex smutex :: Mutex, eyi ti ko ni beere pinning.
  • NoWaitLock ti a ṣafikun, eyiti ko duro de titiipa, ati ti o ba tẹdo nipasẹ o tẹle ara miiran, fa aṣiṣe lati royin nigbati o n gbiyanju lati gba titiipa dipo idaduro olupe naa.
  • RawSpinLock ti a ṣafikun, ti idanimọ nipasẹ raw_spinlock_t ninu ekuro, lati kan si awọn apakan ti ko le ṣiṣẹ.
  • Iru AREf ti a ṣafikun fun awọn itọkasi si ohun kan eyiti a ti lo ẹrọ kika itọkasi (atunsọ nigbagbogbo).
  • Rustc_codegen_gcc backend, eyiti o fun ọ laaye lati lo ile-ikawe libgccjit lati inu iṣẹ akanṣe GCC bi olupilẹṣẹ koodu ni rustc lati pese rustc pẹlu atilẹyin fun awọn ayaworan ati awọn iṣapeye ti o wa ni GCC, ti ṣe imuse agbara lati ṣe bootstrapping alakojo rustc. Igbega olupilẹṣẹ tumọ si agbara lati lo olupilẹṣẹ koodu orisun GCC ni rustc lati kọ akojọpọ rustc funrararẹ. Ni afikun, itusilẹ aipẹ ti GCC 12.1 pẹlu awọn atunṣe si libgccjit pataki fun rustc_codegen_gcc lati ṣiṣẹ ni deede. Awọn igbaradi ti nlọ lọwọ lati pese agbara lati fi sori ẹrọ rustc_codegen_gcc nipa lilo ohun elo rustup.
  • Ilọsiwaju ninu idagbasoke ti GCC frontend gccrs pẹlu imuse ti akopọ ede Rust ti o da lori GCC jẹ akiyesi. Lọwọlọwọ awọn olupilẹṣẹ akoko kikun meji ti n ṣiṣẹ lori gccrs.

Ranti pe awọn iyipada ti a dabaa jẹ ki o ṣee ṣe lati lo Rust bi ede keji fun idagbasoke awakọ ati awọn modulu ekuro. Atilẹyin ipata ni a gbekalẹ bi aṣayan ti ko ṣiṣẹ nipasẹ aiyipada ati pe ko ja si ni ipata ti o wa bi igbẹkẹle kikọ ti o nilo fun ekuro. Lilo Rust fun idagbasoke awakọ yoo gba ọ laaye lati ṣẹda ailewu ati awọn awakọ to dara julọ pẹlu ipa diẹ, ọfẹ lati awọn iṣoro bii iraye si iranti lẹhin didi, awọn ifọkasi itọka asan, ati awọn ifasilẹ ifipamọ.

Mimu ailewu iranti ni a pese ni ipata ni akoko iṣakojọpọ nipasẹ iṣayẹwo itọkasi, ṣiṣe itọju ohun-ini ohun ati igbesi aye ohun (opin), ati nipasẹ igbelewọn ti deede wiwọle iranti lakoko ṣiṣe koodu. Ipata tun pese aabo lodi si ṣiṣan odidi odidi, nilo ipilẹṣẹ dandan ti awọn iye oniyipada ṣaaju lilo, mu awọn aṣiṣe dara julọ ni ile-ikawe boṣewa, lo imọran ti awọn itọkasi ailagbara ati awọn oniyipada nipasẹ aiyipada, nfunni titẹ aimi to lagbara lati dinku awọn aṣiṣe ọgbọn.

orisun: opennet.ru

Fi ọrọìwòye kun