Vèsyon an sizyèm nan plak pou nwayo a Linux ak sipò pou lang nan Rust

Miguel Ojeda, otè pwojè Rust-for-Linux la, te pwopoze lage konpozan v6 pou devlope chofè aparèy nan lang Rust pou devlopè nwayo Linux yo konsidere yo. Sa a se setyèm edisyon nan plak yo, pran an kont premye vèsyon an, pibliye san yo pa yon nimewo vèsyon. Yo konsidere sipò Rust kòm eksperimantal, men li deja enkli nan branch linux-next la epi li ase devlope pou kòmanse travay sou kreye kouch abstrè sou subsistèm nwayo, osi byen ke ekri chofè ak modil. Devlopman an finanse pa Google ak ISRG (Gwoup Rechèch Sekirite Entènèt la), ki se fondatè pwojè Let's Encrypt ak ankouraje HTTPS ak devlopman teknoloji pou amelyore sekirite entènèt la.

Nan nouvo vèsyon an:

  • Zouti a ak yon varyant nan bibliyotèk alok la, libere nan jenerasyon posib nan yon eta "panik" lè erè rive, yo te mete ajou ak liberasyon an nan Rust 1.60, ki estabilize sipò pou "maybe_uninit_extra" mòd yo itilize nan plak nwayo a.
  • Te ajoute kapasite nan kouri tès ki soti nan dokiman an (tès ki itilize tou kòm egzanp nan dokiman an), atravè konvèsyon-tan konpile nan tès ki mare nan API a nwayo nan tès KUnit egzekite pandan loading nwayo.
  • Yo te adopte kondisyon pou tès yo pa ta dwe lakòz yon avètisman Clippy linter, menm jan ak kòd nwayo Rust.
  • Yo pwopoze yon premye aplikasyon modil "net" ak fonksyon rezo a. Kòd Rust gen aksè a estrikti rezo nwayo tankou Namespace (ki baze sou estrikti nwayo struct net), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) ak ekivalan IPv6 yo. .
  • Gen sipò inisyal pou teknik pwogram asynchrone (async), aplike nan fòm lan nan modil kasync. Pa egzanp, ou ka ekri kòd asynchrone pou manipile TCP sockets: async fn echo_server(stream: TcpStream) -> Rezilta { let mut buf = [0u8; 1024]; bouk { kite n = stream.read(&mut buf).wait?; si n == 0 { retounen Ok(()); } stream.write_all(&buf[..n]).wait?; } }
  • Te ajoute net::filter modil pou manipile filtè pake rezo. Te ajoute egzanp rust_netfilter.rs ak yon aplikasyon filtre nan lang Rust.
  • Te ajoute aplikasyon yon senp mutex smutex::Mutex, ki pa mande pou pinning.
  • Te ajoute NoWaitLock, ki pa janm tann pou yon kadna, epi si okipe pa yon lòt fil, lakòz yon erè yo dwe rapòte lè w ap eseye jwenn kadna a olye pou yo sispann moun kap rele a.
  • Te ajoute RawSpinLock, idantifye pa raw_spinlock_t nan nwayo a, pou aplike nan seksyon ki pa ka san fè anyen konsa.
  • Te ajoute kalite ARef pou referans a yon objè kote yo aplike mekanis konte referans (toujou-refcounted).
  • Backend rustc_codegen_gcc, ki pèmèt ou sèvi ak bibliyotèk libgccjit ki soti nan pwojè GCC kòm yon jeneratè kòd nan rustc pou bay rustc sipò pou achitekti ak optimize ki disponib nan GCC, te aplike kapasite pou bootstrapping du rustc la. Pwomosyon konpilatè vle di kapasite pou itilize yon dèlko kòd ki baze sou GCC nan rustc pou konstwi du rustc tèt li. Anplis de sa, liberasyon ki sot pase GCC 12.1 gen ladan korije libgccjit ki nesesè pou rustc_codegen_gcc travay kòrèkteman. Preparasyon yo ap fèt pou bay kapasite pou enstale rustc_codegen_gcc lè l sèvi avèk sèvis piblik rustup la.
  • Yo remake pwogrè nan devlopman GCC frontend gccrs ak aplikasyon konpilatè lang Rust ki baze sou GCC. Kounye a gen de devlopè aplentan k ap travay sou gccrs.

Sonje byen, chanjman yo pwopoze yo fè li posib pou itilize Rust kòm yon dezyèm lang pou devlope chofè ak modil nwayo. Yo prezante sipò Rust kòm yon opsyon ki pa aktive pa default epi ki pa lakòz yo enkli Rust kòm yon depandans konstriksyon obligatwa pou nwayo a. Sèvi ak Rust pou devlopman chofè pral pèmèt ou kreye chofè ki pi an sekirite ak pi bon ak efò minim, san pwoblèm tankou aksè memwa apre yo fin libere, dereferans pointeur nil, ak depase tanpon.

Sekirite memwa yo bay nan Rust nan moman konpile atravè tcheke referans, kenbe tras nan pwopriyetè objè a ak tout lavi objè a (dimansyon), osi byen ke nan evalyasyon kòrèk aksè nan memwa pandan ekzekisyon kòd. Rust tou bay pwoteksyon kont debòde nonb antye relatif, mande pou inisyalizasyon obligatwa nan valè varyab anvan ou itilize, okipe erè pi byen nan bibliyotèk estanda a, aplike konsèp nan referans imuiabl ak varyab pa default, ofri fò sezisman estatik pou minimize erè lojik.

Sous: opennet.ru

Add nouvo kòmantè