Ang ikaunom nga bersyon sa mga patch alang sa Linux kernel nga adunay suporta alang sa Rust nga pinulongan

Si Miguel Ojeda, tagsulat sa Rust-for-Linux nga proyekto, nagsugyot sa pagpagawas sa v6 nga mga sangkap alang sa pagpalambo sa mga driver sa device sa Rust nga pinulongan alang sa konsiderasyon sa Linux kernel developers. Kini ang ikapitong edisyon sa mga patch, nga gikonsiderar ang unang bersyon, nga gipatik nga walay numero sa bersyon. Ang suporta sa Rust giisip nga eksperimento, apan gilakip na sa sunod nga sanga sa linux ug igo nga naugmad aron magsugod sa pagtrabaho sa paghimo sa mga abstraction layer sa mga subsystem sa kernel, ingon man ang pagsulat sa mga drayber ug module. Ang kalamboan gipondohan sa Google ug sa ISRG (Internet Security Research Group), nga mao ang nagtukod sa Let's Encrypt nga proyekto ug nagpasiugda sa HTTPS ug sa pagpalambo sa mga teknolohiya aron mapausbaw ang seguridad sa Internet.

Sa bag-ong bersyon:

  • Ang toolkit ug usa ka variant sa alloc library, nga gipagawas gikan sa posible nga henerasyon sa usa ka "panic" nga estado kung adunay mga sayup, gi-update sa pagpagawas sa Rust 1.60, nga nagpalig-on sa suporta alang sa "maybe_uninit_extra" mode nga gigamit sa mga patch sa kernel.
  • Gidugang ang abilidad sa pagpadagan sa mga pagsulay gikan sa dokumentasyon (mga pagsulay nga gigamit usab ingon nga mga pananglitan sa dokumentasyon), pinaagi sa pag-compile-time nga pagkakabig sa mga pagsulay nga gihigot sa kernel API ngadto sa mga pagsulay sa KUnit nga gipatuman sa panahon sa pagkarga sa kernel.
  • Ang mga kinahanglanon gisagop nga ang mga pagsulay dili kinahanglan nga moresulta sa usa ka Clippy linter nga pasidaan, sama sa Rust kernel code.
  • Usa ka inisyal nga pagpatuman sa "pukot" nga module nga adunay mga gimbuhaton sa network gisugyot. Ang Rust code adunay access sa mga istruktura sa kernel network sama sa Namespace (base sa struct net kernel structure), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) ug ilang IPv6 equivalents .
  • Adunay inisyal nga suporta alang sa asynchronous programming techniques (async), gipatuman sa porma sa kasync module. Pananglitan, mahimo nimong isulat ang asynchronous code aron mamanipula ang TCP sockets: async fn echo_server(stream: TcpStream) -> Resulta {let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf).maghulat?; kon n == 0 {balik Ok(()); } stream.write_all(&buf[..n]).maghulat?; }}
  • Gidugang net:: filter module para sa pagmaniobra sa network packet filters. Gidugang nga pananglitan ang rust_netfilter.rs nga adunay pagpatuman sa filter sa Rust nga pinulongan.
  • Gidugang nga pagpatuman sa usa ka yano nga mutex smutex::Mutex, nga wala magkinahanglan og pinning.
  • Gidugang ang NoWaitLock, nga dili maghulat sa usa ka kandado, ug kung giokupahan sa lain nga hilo, hinungdan sa usa ka sayup nga ireport kung mosulay sa pagkuha sa kandado imbis nga hunongon ang nanawag.
  • Gidugang ang RawSpinLock, giila sa raw_spinlock_t sa kernel, aron magamit sa mga seksyon nga dili mahimo nga walay pulos.
  • Gidugang ang tipo sa ARef alang sa mga pakisayran sa usa ka butang diin ang mekanismo sa pag-ihap sa pakisayran gipadapat (kanunay nga gi-refcount).
  • Ang rustc_codegen_gcc backend, nga nagtugot kanimo sa paggamit sa librarya sa libgccjit gikan sa proyekto sa GCC ingon usa ka generator sa code sa rustc aron mahatagan ang suporta sa rustc alang sa mga arkitektura ug pag-optimize nga magamit sa GCC, nagpatuman sa abilidad sa pag-bootstrap sa rustc compiler. Ang promosyon sa compiler nagpasabut sa abilidad sa paggamit sa usa ka GCC-based code generator sa rustc aron matukod ang rustc compiler mismo. Dugang pa, ang bag-o nga pagpagawas sa GCC 12.1 naglakip sa mga pag-ayo sa libgccjit nga gikinahanglan aron ang rustc_codegen_gcc molihok sa husto. Nagpadayon ang mga pagpangandam aron mahatagan ang katakus sa pag-install sa rustc_codegen_gcc gamit ang rustup utility.
  • Ang pag-uswag sa pag-uswag sa GCC frontend gccrs uban ang pagpatuman sa Rust language compiler base sa GCC namatikdan. Sa pagkakaron adunay duha ka full-time nga developer nga nagtrabaho sa gccrs.

Hinumdomi nga ang gisugyot nga mga pagbag-o nagpaposible sa paggamit sa Rust isip ikaduha nga pinulongan alang sa pagpalambo sa mga drayber ug kernel modules. Ang suporta sa Rust gipresentar isip usa ka opsyon nga dili mahimo pinaagi sa default ug dili moresulta sa Rust nga gilakip isip usa ka gikinahanglan nga pagsalig sa pagtukod alang sa kernel. Ang paggamit sa Rust alang sa pagpalambo sa drayber magtugot kanimo sa paghimo og mas luwas ug mas maayo nga mga drayber nga adunay gamay nga paningkamot, gawasnon sa mga problema sama sa pag-access sa memorya human sa pagpalaya, null pointer dereferences, ug buffer overruns.

Ang pagdumala nga luwas sa memorya gihatag sa Rust sa oras sa pag-compile pinaagi sa pagsusi sa pakisayran, pagsubay sa pagpanag-iya sa butang ug kinabuhi sa butang (sangkap), ingon man pinaagi sa pagtimbang-timbang sa pagkahusto sa pag-access sa memorya sa panahon sa pagpatuman sa code. Naghatag usab ang Rust og proteksyon batok sa pag-awas sa integer, nanginahanglan mandatory nga pagsugod sa mga variable nga kantidad sa wala pa gamiton, pagdumala sa mga sayup nga mas maayo sa standard nga librarya, gipadapat ang konsepto sa dili mausab nga mga pakisayran ug mga variable nga default, nagtanyag kusog nga static nga pag-type aron maminusan ang mga lohikal nga sayup.

Source: opennet.ru

Idugang sa usa ka comment