De achtste ferzje fan patches foar de Linux kernel mei stipe foar de Rust-taal

Miguel Ojeda, skriuwer fan it Rust-for-Linux-projekt, stelde de frijlitting fan v8-komponinten foar foar it ûntwikkeljen fan apparaatbestjoerders yn 'e Rust-taal foar konsideraasje troch Linux-kernel-ûntwikkelders. Dit is de feroare ferzje fan 'e patches, rekken hâldend mei de earste ferzje, publisearre sûnder in ferzjenûmer. Rust-stipe wurdt as eksperiminteel beskôge, mar is al opnommen yn 'e linux-next branch, beweart te wêzen yntegrearre yn' e hjerstútjefte fan 5.20 / 6.0, en is folwoeksen genôch om te begjinnen mei it wurk oan it meitsjen fan abstraksjelagen oer kernel-subsystemen, lykas it skriuwen fan bestjoerders. en modules. De ûntwikkeling wurdt finansierd troch Google en de ISRG (Internet Security Research Group), dy't de oprjochter is fan it projekt Let's Encrypt en befoarderet HTTPS en de ûntwikkeling fan technologyen om ynternetfeiligens te ferbetterjen.

Yn de nije ferzje:

  • De toolkit en in fariant fan 'e alloc-bibleteek, frij fan mooglike generaasje fan in "panyk" steat as flaters foarkomme, binne bywurke foar de frijlitting fan Rust 1.62. Yn ferliking mei de earder brûkte ferzje hat de Rust toolkit stipe stabilisearre foar de const_fn_trait_bound funksjonaliteit brûkt yn kernel patches.
  • De binende koade is skieden yn in apart kratpakket "bindingen", wat it werbouwen simplifies as feroarings wurde makke allinnich oan it haadpakket "kernel".
  • Implementaasje fan 'e makro "concat_idents!" op 'e nij skreaun yn' e foarm fan in prosedurele makro dat is net bûn oan de funksjonaliteit concat_idents en makket it mooglik om te brûken ferwizings nei lokale fariabelen.
  • De makro "static_assert!" is opnij skreaun, wêrtroch it gebrûk fan "core :: assert!()" yn elke kontekst mooglik is ynstee fan konstanten.
  • Makro "build_error!" oanpast om te wurkjen as de modus "RUST_BUILD_ASSERT_{WARN,ALLOW}" ynsteld is foar modules.
  • In apart bestân tafoege mei ynstellings "kernel/configs/rust.config".
  • De "*.i"-bestannen ferwurke yn makro-ferfangings binne omneamd ta "*.rsi".
  • Stipe foar it bouwen fan Rust-komponinten mei optimalisaasjenivo's oars as dy brûkt foar C-koade is stopset.
  • Fs-module tafoege, dy't bindingen leveret foar wurkjen mei bestânsystemen. In foarbyld fan in ienfâldich bestânsysteem skreaun yn Rust wurdt levere.
  • Added workqueue module foar it wurkjen mei systeem wachtrigen (levere bindingen oer de work_struct en workqueue_struct kernel struktueren).
  • De ûntwikkeling fan 'e kasync-module gie troch mei de ymplemintaasje fan asynchrone programmearringmetoaden (async). In foarbyld tafoege fan in TCP-tsjinner op kearnnivo skreaun yn Rust.
  • De mooglikheid tafoege om ûnderbrekkingen te behanneljen yn 'e Rust-taal mei de typen [Threaded]Handler en de [Threaded]Registraasje`-typen.
  • Proseduele makro "#[vtable]" tafoege om it makliker te meitsjen mei tabellen fan funksje-oanwizers, lykas de file_operations-struktuer.
  • Tafoege ymplemintaasje fan bidireksjoneel keppele listen "unsafe_list :: List".
  • Inisjele stipe tafoege foar RCU (Read-copy-update) en Guard-type om te kontrolearjen oft in lêsslot is bûn oan 'e hjoeddeistige thread.
  • Tafoege Task :: spawn () funksje foar it meitsjen en automatysk begjinne kernel triedden. Ek tafoege de Task :: wake_up () metoade.
  • Added in fertraging module wêrmei jo te brûken fertragingen (in wrapper oer msleep ()).

De foarstelde feroarings meitsje it mooglik om Rust te brûken as twadde taal foar it ûntwikkeljen fan bestjoerders en kernelmodules. Rust-stipe wurdt presintearre as in opsje dy't net standert ynskeakele is en net resulteart yn it opnimmen fan Rust ûnder de fereaske build-ôfhinklikens foar de kernel. Troch Rust te brûken om sjauffeurs te ûntwikkeljen kinne jo feiliger en bettere sjauffeurs meitsje mei minimale ynspanning, frij fan problemen lykas tagong ta in ûnthâldgebiet nei't it befrijd is, nul-oanwizers derferearje, en buffer-oerrin.

Unthâld-feilige ôfhanneling wurdt foarsjoen yn Rust op it gearstallen tiid troch referinsje kontrôle, byhâlden fan foarwerp eigendom en foarwerp libben (omfang), likegoed as troch evaluaasje fan 'e korrektheid fan ûnthâld tagong ûnder koade útfiering. Rust leveret ek beskerming tsjin oerstreamingen fan heule getal, fereasket ferplichte inisjalisaasje fan fariabele wearden foar gebrûk, behannelet flaters better yn 'e standertbibleteek, tapast standert it konsept fan ûnferoarlike referinsjes en fariabelen, biedt sterke statyske typen om logyske flaters te minimalisearjen.

Boarne: opennet.ru

Add a comment