Ny dikan-teny fahenina amin'ny patch ho an'ny kernel Linux miaraka amin'ny fanohanana ny fiteny Rust

Miguel Ojeda, mpanoratra ny tetikasa Rust-for-Linux, dia nanolotra ny famoahana ireo singa v6 ho an'ny fampivoarana ireo mpamily fitaovana amin'ny fiteny Rust mba hodinihin'ireo mpamorona kernel Linux. Ity no andiany fahafito amin'ny patch, raha jerena ny dikan-teny voalohany, navoaka tsy misy laharana dikan-teny. Ny fanohanan'ny harafesina dia heverina ho andrana, saingy efa tafiditra ao amin'ny sampana linux-manaraka ary efa novolavolaina ampy hanombohana asa amin'ny famoronana sosona abstraction amin'ny subsystems kernel, ary koa ny fanoratana mpamily sy maody. Ny fampandrosoana dia vatsian'ny Google sy ny ISRG (Internet Security Research Group), izay mpanorina ny tetikasa Let's Encrypt ary mampiroborobo ny HTTPS sy ny fampivoarana ny teknolojia hanatsarana ny fiarovana amin'ny Internet.

Ao amin'ny dikan-teny vaovao:

  • Ny kitapom-pitaovana sy ny variana amin'ny tranomboky alloc, afaka amin'ny mety hisian'ny fanjakana "sahiran-tsaina" rehefa misy ny fahadisoana, dia nohavaozina tamin'ny famoahana ny Rust 1.60, izay manamafy ny fanohanana ny fomba "mety_uninit_extra" ampiasaina amin'ny patch kernel.
  • Nampiana ny fahafahana manao fitsapana avy amin'ny antontan-taratasy (fitsapana izay ampiasaina ho ohatra ao amin'ny antontan-taratasy ihany koa), amin'ny alΓ lan'ny famoriam-potoana ny fiovam-pitsapana mifamatotra amin'ny kernel API ho amin'ny fitsapana KUnit natao nandritra ny famoahana kernel.
  • Noraisina ny fepetra fa tsy tokony hiteraka fampitandremana Clippy linter ny fitsapana, toy ny code kernel Rust.
  • Aroso ny fampiharana voalohany ny maody "net" miaraka amin'ny fiasan'ny tambajotra. Ny kaody harafesina dia afaka miditra amin'ny rafitry ny tambajotra kernel toy ny Namespace (mifototra amin'ny rafitra kernel net struct), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) ary ny IPv6 mitovy aminy .
  • Misy fanohanana voalohany ho an'ny teknika fandaharana asynchronous (async), ampiharina amin'ny endrika module kasync. Ohatra, azonao atao ny manoratra code asynchronous hanodinana ny socket TCP: async fn echo_server(stream: TcpStream) -> Result { let mut buf = [0u8; 1024]; loop { avelao n = stream.read(&mut buf).miandry?; raha n == 0 { miverina Ok(()); } stream.write_all(&buf[..n]).miandry?; } }
  • Nampiana net :: mody sivana ho an'ny fanodinkodinana ny sivana fonosana tambajotra. Nampiana ohatra rust_netfilter.rs misy fampiharana sivana amin'ny fiteny Rust.
  • Nampiana ny fampiharana mutex smutex::Mutex tsotra, izay tsy mila fametahana.
  • Nampiana NoWaitLock, izay tsy miandry hidin-trano na oviana na oviana, ary raha misy kofehy hafa, dia miteraka hadisoana hitaterana rehefa manandrana maka ny hidin-trano fa tsy manakana ny mpiantso.
  • Nampiana RawSpinLock, voafaritry ny raw_spinlock_t ao amin'ny kernel, mba hampiharina amin'ny fizarana izay tsy azo atao.
  • Nampiana karazana ARef ho an'ny fanondroana zavatra iray izay ampiharana ny mekanika fanisana reference (averina averina foana).
  • Ny rustc_codegen_gcc backend, izay ahafahanao mampiasa ny tranomboky libgccjit avy amin'ny tetikasa GCC ho toy ny mpamorona kaody ao amin'ny rustc mba hanomezana rustc amin'ny fanohanana ny maritrano sy ny fanatsarana hita ao amin'ny GCC, dia nampihatra ny fahafahana bootstrapping ny rustc compiler. Ny fampiroboroboana ny compiler dia midika ny fahafahana mampiasa mpamokatra kaody mifototra amin'ny GCC ao amin'ny rustc hananganana ny compiler rustc. Fanampin'izany, ny famoahana vao haingana ny GCC 12.1 dia ahitana fanamboarana ny libgccjit ilaina amin'ny rustc_codegen_gcc mba hiasa tsara. Mandeha ny fanomanana mba hanomezana fahafahana hametraka rustc_codegen_gcc amin'ny fampiasana ny rustup utility.
  • Voamarika ny fandrosoana amin'ny fampiroboroboana ny GCC frontend gccrs miaraka amin'ny fampiharana ny compiler fiteny Rust mifototra amin'ny GCC. Amin'izao fotoana izao dia misy mpandrindra maharitra roa miasa amin'ny gccrs.

Tsarovy fa ireo fanovana naroso dia ahafahana mampiasa ny Rust ho fiteny faharoa amin'ny famolavolana mpamily sy maody kernel. Ny fanohanan'ny Rust dia aseho ho toy ny safidy tsy avela amin'ny alΓ lan'ny default ary tsy miteraka ny Rust ho tafiditra ho fiankinan-doha ilaina amin'ny kernel. Ny fampiasana Rust ho an'ny fampandrosoana ny mpamily dia ahafahanao mamorona mpamily azo antoka kokoa sy tsara kokoa miaraka amin'ny ezaka kely indrindra, tsy misy olana toy ny fidirana amin'ny fahatsiarovana aorian'ny fanafahana, ny tsy fahampian'ny pointer tsy misy dikany ary ny fihoaran'ny buffer.

Ny harafesina dia manery ny fiarovana ny fitadidiana amin'ny fotoana fanangonana amin'ny alΓ lan'ny fanamarinana reference, ny fananana zavatra ary ny fanaraha-maso mandritra ny androm-piainana (scopes), ary amin'ny fanombanana ny fahamarinan'ny fidirana amin'ny fitadidiana amin'ny fotoana fandehanana. Ny Rust koa dia manome fiarovana amin'ny fihoaran'ny integer, mitaky ny fanombohana ny soatoavina miovaova alohan'ny hampiasana azy, manana fikarakarana fahadisoana tsara kokoa ao amin'ny tranomboky mahazatra, mampiasa ny foto-kevitry ny fanondroana sy ny fari-pitsipika tsy azo ovaina amin'ny alΓ lan'ny default, ary manolotra sora-baventy matanjaka mba hampihenana ny lesoka lojika.

Source: opennet.ru

Add a comment