Kuudes versio korjaustiedostoista Linux-ytimelle, joka tukee Rust-kieltä

Rust-for-Linux-projektin kirjoittaja Miguel Ojeda ehdotti v6-komponenttien julkaisua laiteajurien kehittämiseen Rust-kielellä Linux-ytimen kehittäjien harkittavaksi. Tämä on korjauspäivitysten seitsemäs painos, kun otetaan huomioon ensimmäinen versio, julkaistu ilman versionumeroa. Rust-tukea pidetään kokeellisena, mutta se on jo mukana linux-next-haarassa ja on riittävän kehittynyt, jotta voidaan aloittaa abstraktiokerrosten luominen ytimen alijärjestelmiin sekä ajurien ja moduulien kirjoittaminen. Kehitystä rahoittavat Google ja ISRG (Internet Security Research Group), joka on Let's Encrypt -projektin perustaja ja edistää HTTPS:ää ja Internetin turvallisuutta parantavien teknologioiden kehitystä.

Uudessa versiossa:

  • Työkalusarja ja alloc-kirjaston muunnos, jotka on vapautettu mahdollisesta "paniikki"-tilan luomisesta virheiden ilmetessä, on päivitetty julkaisuun Rust 1.60, joka vakauttaa ytimen korjauspäivityksissä käytetyn "maybe_uninit_extra"-tilan tuen.
  • Lisätty mahdollisuus suorittaa testejä dokumentaatiosta (testejä, joita käytetään myös esimerkkeinä dokumentaatiossa) muuntamalla ytimen API:hen sidottu testit käännösaikaisesti KUnit-testeiksi, jotka suoritetaan ytimen latauksen aikana.
  • Vaatimukset on otettu käyttöön, että testit eivät saa aiheuttaa Clippy-linterivaroitusta, kuten Rust-ytimen koodi.
  • "Net"-moduulin ensimmäistä käyttöönottoa verkkotoimintoineen ehdotetaan. Rust-koodilla on pääsy ytimen verkkorakenteisiin, kuten Namespace (perustuu struct net kernel -rakenteeseen), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) ja niiden IPv6-vastineet .
  • Asynkronisille ohjelmointitekniikoille (async) on alustava tuki, joka on toteutettu kasync-moduulin muodossa. Voit esimerkiksi kirjoittaa asynkronista koodia TCP-vastakkeiden käsittelemiseksi: async fn echo_server(stream: TcpStream) -> Tulos { let mut buf = [0u8; 1024]; silmukka { anna n = stream.read(&mut buf).wait?; jos n == 0 { return Ok(()); } stream.write_all(&buf[..n]).wait?; } }
  • Lisätty net::filter-moduuli verkkopakettisuodattimien käsittelyyn. Lisätty esimerkki rust_netfilter.rs suodattimen toteutuksella Rust-kielellä.
  • Lisätty toteutus yksinkertaisesta mutexista smutex::Mutex, joka ei vaadi kiinnitystä.
  • Lisätty NoWaitLock, joka ei koskaan odota lukkoa ja jos se on toisen säikeen varassa, aiheuttaa virheilmoituksen yrittäessään saada lukkoa soittajan pysäyttämisen sijaan.
  • Lisätty RawSpinLock, jonka ytimessä on raw_spinlock_t, ja jota sovelletaan osioihin, jotka eivät voi olla käyttämättömänä.
  • Lisätty ARef-tyyppi viittauksille objektiin, johon viittausten laskentamekanismia käytetään (aina uudelleen laskettu).
  • Rustc_codegen_gcc-taustajärjestelmä, jonka avulla voit käyttää GCC-projektin libgccjit-kirjastoa koodigeneraattorina rustc:ssä, jotta rustc tukee GCC:ssä saatavilla olevia arkkitehtuureja ja optimointeja, on ottanut käyttöön mahdollisuuden rustc-kääntäjän käynnistämiseen. Kääntäjäpromootio tarkoittaa kykyä käyttää GCC-pohjaista koodigeneraattoria rustc:ssä itse rustc-kääntäjän rakentamiseen. Lisäksi äskettäin julkaistu GCC 12.1 sisältää korjauksia libgccjit-tiedostoon, jotka ovat välttämättömiä rustc_codegen_gcc:n toimimiseksi oikein. Valmistelut ovat käynnissä, jotta rustc_codegen_gcc voidaan asentaa rustup-apuohjelman avulla.
  • GCC:n käyttöliittymän gccrs:n kehityksen edistyminen GCC:hen perustuvan Rust-kielen kääntäjän käyttöönotolla on huomioitu. Gccrs:n parissa työskentelee tällä hetkellä kaksi kokopäiväistä kehittäjää.

Muista, että ehdotetut muutokset mahdollistavat Rustin käytön toisena kielenä ohjaimien ja ydinmoduulien kehittämisessä. Ruosteen tuki esitetään vaihtoehtona, joka ei ole oletusarvoisesti käytössä, eikä se johda ruosteen sisällyttämiseen ytimen pakollisena koontiriippuvuutena. Rustin käyttäminen ajurien kehittämiseen mahdollistaa turvallisempien ja parempien ohjainten luomisen vähällä vaivalla, ilman ongelmia, kuten muistin käyttöä vapauttamisen jälkeen, nollaosoittimen viittauksia ja puskurin ylityksiä.

Muistiturvallista käsittelyä tarjotaan Rustissa käännöshetkellä referenssitarkistuksen, objektin omistajuuden ja objektin käyttöiän (laajuus) seurantaan sekä muistin käytön oikeellisuuden arviointiin koodin suorittamisen aikana. Ruoste tarjoaa myös suojan kokonaislukujen ylivuodoilta, vaatii muuttujien arvojen pakollisen alustamisen ennen käyttöä, käsittelee virheet paremmin standardikirjastossa, soveltaa oletusarvoisesti muuttumattomien viitteiden ja muuttujien käsitettä, tarjoaa vahvan staattisen kirjoittamisen loogisten virheiden minimoimiseksi.

Lähde: opennet.ru

Lisää kommentti