Guhertoya şeşemîn a paçên ji bo kernel Linux bi piştgirîya zimanê Rust

Miguel Ojeda, nivîskarê projeya Rust-for-Linux, serbestberdana hêmanên v6 ji bo pêşdebirina ajokarên cîhazê bi zimanê Rust pêşniyar kir ku ji hêla pêşdebirên kernel Linux ve were nirxandin. Ev çapa heftemîn a paçeyan e, ku guhertoya yekem li ber çavan digire, ku bêyî jimareyek guhertoyê hatî weşandin. Piştgiriya Rust wekî ceribandinek tête hesibandin, lê jixwe di şaxê linux-next de tête navandin û bi têra xwe pêşkeftî ye ku dest bi xebata li ser çêkirina qatên abstraksiyonê li ser bine pergalên kernel, û her weha nivîsandina ajoker û modulan bike. Pêşveçûn ji hêla Google û ISRG (Koma Lêkolîna Ewlekariya Înternetê) ve tê fînanse kirin, ku damezrînerê projeya Let's Encrypt e û HTTPS û pêşkeftina teknolojiyên ji bo baştirkirina ewlehiya Internetnternetê pêşve dike.

Di guhertoya nû de:

  • Amûrek û guhertoyek pirtûkxaneya allocê, ku ji nifşek gengaz a rewşek "panîkê" dema ku xeletî çêdibin, hatine nûve kirin, ji bo serbestberdana Rust 1.60, ku piştgirîya moda "maybe_uninit_extra" ya ku di paçên kernel de tê bikar anîn stabîl dike, hatî nûve kirin.
  • Bi veguheztina testên ku bi API-ya kernelê ve girêdayî ne di ceribandinên KUnit de ku di dema barkirina kernelê de hatine darve kirin, jêhatîbûna ceribandinên ji belgenameyê (ceribandinên ku di belgenameyê de jî wekî mînak têne bikar anîn) zêde kirin.
  • Pêdiviyên hatine pejirandin ku ceribandin divê nebin sedema hişyariyek lintera Clippy, mîna koda kernelê ya Rust.
  • Pêkanîna destpêkê ya modula "net" bi fonksiyonên torê tê pêşniyar kirin. Koda Rust xwedan strukturên torê yên kernel ên wekî Navê (li ser bingeha strukturên tora kernelê ye), SkBuff (struktura sk_buff), TcpListener, TcpStream (suketa strukturê), Ipv4Addr (struct in_addr), SocketAddrV4 (struktura kernel e) û IP-ya wan e .
  • Piştgiriya destpêkê ji bo teknîkên bernameya asynchronous (asynchronous) heye, ku di forma modula kasync de hatî bicîh kirin. Mînakî, hûn dikarin koda asynchronous binivîsin ku soketên TCP-ê manîpule bikin: async fn echo_server(stream: TcpStream) -> Encam { let mut buf = [0u8; 1024]; loop { bila n = stream.read(&mut buf).li benda?; heke n == 0 {vegere Ok(()); } stream.write_all(&buf[..n]).wait?; } }
  • Ji bo manîpulekirina parzûnên pakêtê yên torê net::modula parzûnê hat zêdekirin. Mînak rust_netfilter.rs bi pêkanîna parzûnê ya bi zimanê Rust ve zêde kir.
  • Zêdekirina pêkanîna mutex smutex::Mutex a hêsan, ku pêdivî bi pînekirinê nake.
  • NoWaitLock hat zêdekirin, ku tu carî li benda kilîtekê namîne, û heke ji hêla mijarek din ve were dagir kirin, dibe sedem ku xeletiyek were ragihandin dema ku hewl didin ku qeflê bi dest bixin li şûna ku bangker rawestînin.
  • RawSpinLock hate zêdekirin, ku ji hêla raw_spinlock_t ve di kernelê de hate nas kirin, da ku li ser beşên ku nekarin bêkar bin.
  • Tîpa ARef ji bo referansên li ser tiştek ku mekanîzmaya hejmartina referansê lê tê sepandin (her gav-vejimartin) lê zêde kir.
  • Piştgiriya rustc_codegen_gcc, ku destûrê dide te ku hûn pirtûkxaneya libgccjit ji projeya GCC-yê wekî jeneratorek kodê li rustc bikar bînin da ku rustc bi piştgirîya mîmarî û xweşbîniyên ku di GCC-yê de peyda dibin peyda bikin, şiyana bootstrapkirina berhevkarê rustc bicîh kiriye. Pêşveçûna berhevker tê wateya şiyana ku meriv çêkerek kodê ya GCC-ê li rustc bikar bîne da ku berhevkarê rustc bixwe ava bike. Wekî din, serbestberdana dawî ya GCC 12.1 rastkirinên libgccjit yên ku ji bo rustc_codegen_gcc hewce ne ku rast bixebitin vedihewîne. Amadekariyên ji bo peydakirina kapasîteya sazkirina rustc_codegen_gcc bi karanîna karûbar rustup têne peyda kirin.
  • Pêşveçûn di pêşkeftina gccrs eniya GCC-yê de bi pêkanîna berhevkarê zimanê Rust-ê ku li ser bingeha GCC-yê ye tê destnîşan kirin. Niha du pêşdebirên tam-dem hene ku li ser gccrs dixebitin.

Bînin bîra xwe ku guheztinên pêşniyarkirî dihêle ku hûn Rust wekî zimanek duyemîn ji bo pêşvebirina ajokar û modulên kernel bikar bînin. Piştgiriya Rust wekî vebijarkek ku ji hêla xwerû ve nehatiye çalak kirin tê pêşkêş kirin û nahêle ku Rust wekî pêwendiyek çêkirî ya pêdivî ya ji bo kernelê tevbigere. Bikaranîna Rust ji bo pêşkeftina ajokerê dê bihêle ku hûn bi hewildanek hindiktirîn ajokarên ewledar û çêtir biafirînin, ji pirsgirêkên wekî gihandina bîranînê piştî azadkirinê, veqetandina nîşana betal, û derbasbûna tamponê.

Desthilatdariya ewledar a bîranînê di Rust de di dema berhevkirinê de bi kontrolkirina referansê, şopandina xwedaniya tiştan û dema jiyanê (çarçove) û her weha bi nirxandina rastbûna gihîştina bîranînê di dema darvekirina kodê de tê peyda kirin. Rust di heman demê de parastinê li hember hejmarên bêkêmasî peyda dike, hewce dike ku guhêrbar berî bikarbînê werin destpêkirin, di pirtûkxaneya standard de xeletiyan çêtir digire, têgeha referansên neguhêrbar û guhêrbar ji hêla xwerû ve bicîh tîne, û nivîsandina statîk a bihêz pêşkêşî dike da ku xeletiyên mantiqî kêm bike.

Source: opennet.ru

Add a comment