Qhov thib rau version ntawm thaj ua rau thaj rau Linux ntsiav nrog kev txhawb nqa rau cov lus Rust

Miguel Ojeda, tus sau ntawm Rust-for-Linux project, tau thov kev tso tawm v6 cov khoom siv rau kev tsim cov cuab yeej tsav tsheb hauv cov lus Rust rau kev txiav txim siab los ntawm Linux kernel developers. Qhov no yog lub xya tsab ntawm thaj ua rau thaj, coj mus rau hauv tus account thawj version, luam tawm yam tsis muaj tus lej version. Kev txhawb nqa xeb yog suav tias yog kev sim, tab sis twb tau suav nrog hauv linux-tom ntej ceg thiab tau tsim txaus los pib ua haujlwm ntawm kev tsim cov txheej txheem abstraction hla kernel subsystems, nrog rau kev sau cov tsav tsheb thiab cov qauv. Txoj kev loj hlob yog nyiaj txiag los ntawm Google thiab ISRG (Internet Security Research Group), uas yog tus tsim ntawm Let's Encrypt project thiab txhawb HTTPS thiab kev tsim cov thev naus laus zis los txhim kho Internet kev ruaj ntseg.

Hauv qhov tshiab version:

  • Cov cuab yeej thiab qhov sib txawv ntawm cov tsev qiv ntawv alloc, tso tawm los ntawm qhov ua tau ntawm "kev ntshai" lub xeev thaum muaj teeb meem tshwm sim, tau raug hloov kho rau qhov kev tso tawm ntawm Rust 1.60, uas txhawb kev ruaj ntseg rau "maybe_uninit_extra" hom siv hauv cov ntsiav tshuaj thaj ua rau thaj.
  • Ntxiv lub peev xwm los khiav cov kev xeem los ntawm cov ntaub ntawv (cov kev sim uas tseem siv los ua piv txwv hauv cov ntaub ntawv), los ntawm kev sib sau ua ke-sijhawm hloov dua siab tshiab ntawm cov kev sim khi rau kernel API rau hauv KUnit cov kev sim ua tiav thaum lub sijhawm thauj khoom kernel.
  • Cov kev xav tau tau txais kev pom zoo tias cov kev ntsuam xyuas yuav tsum tsis txhob ua rau Clippy linter ceeb toom, ib yam li Rust kernel code.
  • Thawj qhov kev siv ntawm "net" module nrog kev ua haujlwm hauv network tau npaj siab. Rust code muaj kev nkag mus rau kernel network qauv xws li Namespace (raws li cov qauv net kernel), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) thiab lawv IPv6 equi. .
  • Muaj kev txhawb nqa thawj zaug rau asynchronous programming cov tswv yim (async), siv nyob rau hauv daim ntawv ntawm kasync module. Piv txwv li, koj tuaj yeem sau asynchronous code los tswj TCP sockets: async fn echo_server(kwj: TcpStream) -> Qhov tshwm sim { cia mut buf = [0u8; 1024]; ib. loop { let n = stream.read(&mut buf).await?; yog n == 0 { return Ok(()); } stream.write_all(&buf[..n]).await?; }}
  • Ntxiv net:: lim module rau kev tswj xyuas cov ntaub ntawv network. Ntxiv piv txwv rust_netfilter.rs nrog kev siv lim hauv cov lus Rust.
  • Ntxiv kev siv ntawm ib qho yooj yim mutex smutex::Mutex, uas tsis tas yuav pinning.
  • Ntxiv NoWaitLock, uas yeej tsis tos rau lub xauv, thiab yog tias nyob ntawm lwm cov xov, ua rau muaj qhov yuam kev los qhia thaum sim kom tau txais lub xauv es tsis txhob nres tus neeg hu.
  • Ntxiv RawSpinLock, txheeb xyuas los ntawm raw_spinlock_t hauv kernel, siv rau cov ntu uas tsis tuaj yeem ua haujlwm.
  • Ntxiv ARef hom rau kev xa mus rau ib qho khoom siv uas siv cov kev suav suav siv (ib txwm-refcounted).
  • Lub rustc_codegen_gcc backend, uas tso cai rau koj siv lub tsev qiv ntawv libgccjit los ntawm GCC qhov project ua tus lej tsim hluav taws xob hauv rustc los muab rustc nrog kev txhawb nqa rau architectures thiab optimizations muaj nyob rau hauv GCC, tau siv lub peev xwm los bootstrapping lub rustc compiler. Compiler nce qib txhais tau hais tias muaj peev xwm siv GCC-based code generator hauv rustc los tsim cov rustc compiler nws tus kheej. Tsis tas li ntawd, qhov kev tso tawm tsis ntev los no ntawm GCC 12.1 suav nrog kev kho rau libgccjit tsim nyog rau rustc_codegen_gcc ua haujlwm kom raug. Kev npaj tab tom npaj los muab lub peev xwm rau nruab rustc_codegen_gcc siv cov khoom siv hluav taws xob rustup.
  • Kev nce qib hauv kev txhim kho ntawm GCC frontend gccrs nrog kev siv cov lus Rust compiler raws li GCC tau sau tseg. Tam sim no muaj ob tus neeg tsim khoom puv sijhawm ua haujlwm ntawm gccrs.

Nco qab tias cov kev hloov pauv tau ua rau nws tuaj yeem siv Rust ua hom lus thib ob rau kev tsim cov tsav tsheb thiab cov kernel modules. Kev txhawb nqa xeb yog nthuav tawm raws li qhov kev xaiv uas tsis tau qhib los ntawm lub neej ntawd thiab tsis ua rau Rust suav nrog raws li qhov yuav tsum tau muaj kev vam khom rau cov kernel. Siv Rust rau kev txhim kho tus neeg tsav tsheb yuav tso cai rau koj los tsim kom muaj kev nyab xeeb thiab zoo dua tsav tsheb nrog kev siv zog tsawg, tsis muaj teeb meem xws li kev nkag mus rau lub cim xeeb tom qab tso tawm, tsis muaj qhov taw qhia tsis zoo, thiab tsis muaj kev cuam tshuam.

Kev tuav pov hwm kev nco yog muab rau hauv Rust ntawm lub sijhawm los ntawm kev siv tshuaj xyuas, ua raws li cov tswv cuab ntawm cov khoom thiab lub neej ntawm cov khoom (scope), nrog rau kev ntsuas qhov tseeb ntawm kev nkag mus rau lub cim xeeb thaum lub sijhawm ua tiav cov lej. Rust kuj tseem muab kev tiv thaiv tus naj npawb overflows, yuav tsum tau pib pib ntawm qhov sib txawv ntawm qhov tseem ceeb ua ntej siv, tuav cov kev ua yuam kev zoo dua hauv cov tsev qiv ntawv tus qauv, siv lub tswv yim ntawm cov ntaub ntawv tsis hloov pauv thiab cov kev hloov pauv los ntawm lub neej ntawd, muaj kev ntaus ntawv zoo li qub kom txo qis cov kev ua yuam kev.

Tau qhov twg los: opennet.ru

Ntxiv ib saib