Versi patch kaping wolu kanggo kernel Linux kanthi dhukungan kanggo basa Rust

Miguel Ojeda, penulis proyek Rust-for-Linux, ngusulake rilis komponen v8 kanggo ngembangake driver piranti ing basa Rust kanggo dipikirake dening pangembang kernel Linux. Iki versi revisi saka patch, njupuk menyang akun versi pisanan, diterbitake tanpa nomer versi. Dhukungan teyeng dianggep eksperimen, nanging wis kalebu ing cabang linux-sabanjure, ngaku digabungake menyang rilis musim gugur 5.20 / 6.0, lan cukup diwasa kanggo miwiti nggawe lapisan abstraksi liwat subsistem kernel, uga driver nulis. lan modul. Pangembangan kasebut didanai dening Google lan ISRG (Internet Security Research Group), sing dadi pendiri proyek Let's Encrypt lan promosi HTTPS lan pangembangan teknologi kanggo nambah keamanan Internet.

Ing versi anyar:

  • Toolkit lan varian saka perpustakaan alloc, bebas saka kemungkinan generasi saka negara "gupuh" nalika kasalahan dumadi, wis dianyari kanggo release saka Rust 1.62. Dibandhingake karo versi sadurunge digunakake, Rust toolkit wis stabil support kanggo fungsi const_fn_trait_bound digunakake ing patch kernel.
  • Kode naleni dipisahake menyang paket peti kapisah "bindings", kang simplifies rebuilding yen owah-owahan mung digawe kanggo paket utama "kernel".
  • Implementasi makro "concat_idents!" ditulis maneh ing wangun macro prosedural sing ora disambungake menyang fungsi concat_idents lan ngidini nggunakake referensi kanggo variabel lokal.
  • Makro "static_assert!" wis ditulis maneh, ngidini panggunaan "inti :: negesake! ()" ing konteks apa wae tinimbang konstanta.
  • Macro "build_error!" dicocogake kanggo bisa nalika "RUST_BUILD_ASSERT_{WARN, ALLOW}" mode disetel kanggo modul.
  • Nambahake file sing kapisah karo setelan "kernel/configs/rust.config".
  • File "*.i" sing diproses ing substitusi makro wis diganti jeneng dadi "*.rsi".
  • Dhukungan kanggo mbangun komponen Rust kanthi tingkat optimasi sing beda karo sing digunakake kanggo kode C wis mandheg.
  • Ditambahake modul fs, sing nyedhiyakake pengikat kanggo nggarap sistem file. Conto sistem file prasaja sing ditulis ing Rust diwenehake.
  • Added modul workqueue kanggo nggarap antrian sistem (nyedhiyakake bindings liwat work_struct lan workqueue_struct struktur kernel).
  • Pengembangan modul kasync diterusake kanthi implementasi metode pemrograman asinkron (async). Nambahake conto server TCP tingkat inti sing ditulis ing Rust.
  • Nambahake kemampuan kanggo nangani interupsi ing basa Rust nggunakake jinis [Threaded]Handler lan [Threaded]Registration` jinis.
  • Nambahake makro prosedural "#[vtable]" supaya luwih gampang nggarap tabel penunjuk fungsi, kayata struktur file_operations.
  • Nambahake implementasi dhaptar sing disambungake loro arah "unsafe_list:: List".
  • Dhukungan awal ditambahake kanggo RCU (Read-copy-update) lan jinis Guard kanggo mriksa apa kunci sing diwaca kaiket ing benang saiki.
  • Added Task :: spawn () fungsi kanggo nggawe lan kanthi otomatis miwiti thread kernel. Uga ditambahake metode Tugas :: wake_up ().
  • Added modul tundha sing ngijini sampeyan kanggo nggunakake telat (pambungkus liwat msleep ()).

Owah-owahan sing diusulake ndadekake Rust bisa digunakake minangka basa liya kanggo ngembangake driver lan modul kernel. Dhukungan Rust ditampilake minangka pilihan sing ora diaktifake kanthi standar lan ora nyebabake Rust kalebu minangka ketergantungan mbangun sing dibutuhake kanggo kernel. Nggunakake Rust kanggo pangembangan driver bakal ngidini sampeyan nggawe driver sing luwih aman lan luwih apik kanthi gaweyan minimal, bebas saka masalah kayata akses memori sawise dibebasake, dereferensi null pointer, lan overruns buffer.

Penanganan memori-aman diwenehake ing Rust ing wektu kompilasi liwat mriksa referensi, nglacak kepemilikan obyek lan umur obyek (skop), uga liwat evaluasi bener saka akses memori sak eksekusi kode. Rust uga menehi pangayoman marang overflows integer, mbutuhake initialization prentah saka nilai variabel sadurunge digunakake, Ngalahake kasalahan luwih apik ing perpustakaan standar, ditrapake konsep referensi immutable lan variabel minangka standar, nawakake typing statis kuwat kanggo nyilikake kesalahan logis.

Source: opennet.ru

Add a comment