La oka versio de flikoj por la Linukso-kerno kun subteno por la Rust-lingvo

Miguel Ojeda, verkinto de la Rust-for-Linux-projekto, proponis la liberigon de v8-komponentoj por evoluigado de aparato-ŝoforoj en la Rust-lingvo por konsidero de Linuksaj kernaj programistoj. Ĉi tiu estas la reviziita versio de la flikoj, konsiderante la unuan version, publikigitan sen versio-numero. Rustsubteno estas konsiderita eksperimenta, sed jam estas inkluzivita en la linukso-sekva branĉo, asertas esti integrita en la aŭtuna eldono de 5.20/6.0, kaj estas sufiĉe matura por komenci labori pri kreado de abstraktaj tavoloj super kernaj subsistemoj, kaj ankaŭ verki ŝoforojn. kaj moduloj. La disvolviĝo estas financita de Google kaj la ISRG (Interreta Sekureco-Esplorgrupo), kiu estas la fondinto de la projekto Let's Encrypt kaj antaŭenigas HTTPS kaj la evoluon de teknologioj por plibonigi la interretan sekurecon.

En la nova versio:

  • La ilaro kaj varianto de la alloc-biblioteko, libera de ebla generacio de "paniko" stato kiam okazas eraroj, estis ĝisdatigitaj por la liberigo de Rust 1.62. Kompare kun la antaŭe uzata versio, la ilaro Rust stabiligis subtenon por la funkcio const_fn_trait_bound uzata en kernaj flikoj.
  • La liga kodo estas apartigita en apartan kestan pakaĵon "ligoj", kiu simpligas rekonstruadon se ŝanĝoj estas faritaj nur al la ĉefpakaĵo "kerno".
  • Efektivigo de la makroo "concat_idents!" reverkita en la formo de procedura makroo kiu ne estas ligita al la concat_idents funkcieco kaj permesas la uzon de referencoj al lokaj variabloj.
  • La makroo "static_assert!" estis reverkita, permesante la uzon de "core::assert!()" en iu ajn kunteksto anstataŭ konstantoj.
  • Makroo "konstruo_eraro!" adaptite por funkcii kiam la reĝimo "RUST_BUILD_ASSERT_{WARN,ALLOW}" estas agordita por moduloj.
  • Aldonis apartan dosieron kun agordoj "kernel/configs/rust.config".
  • La dosieroj "*.i" prilaboritaj en makro-anstataŭiĝoj estis renomitaj al "*.rsi".
  • Subteno por konstrui Rust-komponentojn kun optimumigaj niveloj malsamaj ol tiuj uzataj por C-kodo estis nuligita.
  • Aldonita fs-modulo, kiu provizas ligadojn por labori kun dosiersistemoj. Ekzemplo de simpla dosiersistemo skribita en Rust estas provizita.
  • Aldonita workqueue-modulo por labori kun sistemvostoj (provizas ligojn super la work_struct kaj workqueue_struct kernstrukturoj).
  • La evoluo de la kasync-modulo daŭris kun la efektivigo de nesinkronaj programaj metodoj (async). Aldonita ekzemplo de kernnivela TCP-servilo skribita en Rust.
  • Aldonis la kapablon pritrakti interrompojn en la Rust-lingvo uzante la tipojn [Threaded]Handler kaj la tipojn [Threaded]Registration.
  • Aldonita procedura makroo "#[vtable]" por faciligi labori kun tabeloj de funkciomontriloj, kiel ekzemple la strukturo file_operations.
  • Aldonita efektivigo de dudirektaj ligitaj listoj "unsafe_list::List".
  • Aldonita komenca subteno por RCU (Legu-kopi-ĝisdatigo) kaj Guard-tipo por kontroli ĉu lego-seruro estas ligita al la nuna fadeno.
  • Aldonita Task::spawn() funkcio por krei kaj aŭtomate komenci kernfadenojn. Ankaŭ aldonis la metodon Task::wake_up().
  • Aldonita prokrasta modulo, kiu permesas vin uzi prokrastojn (envolvaĵo super msleep()).

La proponitaj ŝanĝoj ebligas uzi Rust kiel duan lingvon por disvolvi ŝoforojn kaj kernmodulojn. Rust-subteno estas prezentita kiel opcio kiu ne estas ebligita defaŭlte kaj ne rezultigas la inkludon de Rust inter la bezonataj konstrudependecoj por la kerno. Uzi Rust por evoluigi ŝoforojn permesos al vi krei pli sekurajn kaj pli bonajn ŝoforojn kun minimuma peno, libera de problemoj kiel aliro al memorareo post kiam ĝi estas liberigita, dereferencigado de nulaj montriloj kaj bufro-tropasoj.

Memorsekureco estas disponigita en Rust ĉe kompiltempo per referenckontrolado, konservante trakon de objektoposedo kaj objektvivdaŭro (amplekso), same kiel tra taksado de la ĝusteco de memoraliro dum kodekzekuto. Rusto ankaŭ provizas protekton kontraŭ entjeraj superfluoj, postulas devigan inicialigon de variaj valoroj antaŭ uzo, pli bone pritraktas erarojn en la norma biblioteko, aplikas la koncepton de neŝanĝeblaj referencoj kaj variabloj defaŭlte, ofertas fortan senmovan tajpadon por minimumigi logikajn erarojn.

fonto: opennet.ru

Aldoni komenton