Miguel Ojeda, autor projektu Rust-for-Linux vydala osmou verzi vývoj záplat linuxového jádra s podporou jazyka Rust pro vývojáře linuxových jader, které je třeba zvážit.
Toto se řadí jako deváté vydání oprav (s přihlédnutím k první vydané verzi bez čísla verze). Podpora rzi je považována za experimentální, ale je již zahrnuta ve větvi linux-next, požaduje integraci v podzimním vydání 5.20/6.0 a je dostatečně pokročilá, aby mohla začít pracovat na vytváření abstraktních vrstev nad subsystémy jádra, stejně jako na psaní řadičů a modulů.
Vývoj je financován Googlem a ISRG (Internet Security Research Group), která je zakladatelem projektu Let's Encrypt a propaguje HTTPS a vývoj technologií pro zvýšení bezpečnosti internetu.
Navrhované změny umožňují používat Rust jako druhý jazyk pro vývoj ovladačů a modulů jádra. Podpora Rust je prezentována jako možnost, která není ve výchozím nastavení povolena a nemá za následek zařazení Rust mezi požadované závislosti sestavení pro jádro. Použití Rustu k vývoji ovladačů vám umožní vytvářet lepší a bezpečnější ovladače s minimálním úsilím, bez problémů, jako je přístup k oblasti paměti po jejím uvolnění, dereferencování nulových ukazatelů a přetečení vyrovnávací paměti.
Bezpečnost paměti je v Rustu zajištěna v době kompilace kontrolou referencí, sledováním vlastnictví objektu a životnosti objektu (rozsahu) a také vyhodnocováním správnosti přístupu do paměti během provádění kódu.
Co je nového v tomto osmém vydání?
V tomto novém návrhu, který byl vydán, je to zmíněno varianta knihovny alloc, který eliminoval možné generování „panického“ stavu při chybách, aktualizováno na verzi Rust 1.62. V porovnání s předchozí verzí má sada nástrojů Rust stabilizovanou podporu pro funkcionalitu const_fn_trait_bound používanou v záplatách jádra.
Kromě toho kód vázání je rozdělen do svazku polí „vazby“. samostatně, což usnadňuje opětovné sestavení, pokud se změní pouze hlavní balíček jádra.
The implementace makra "concat_idents!", Přepsáno jako procedurální makro, které není vázáno na funkci concat_idents a umožňuje použití odkazů na místní proměnné.
Kromě toho je zmíněno, že makro "static_assert!" byl přepsán tak, aby umožňoval "core::assert!()" se používá v libovolném kontextu místo konstant, zatímco makro "construction_error!" byl upraven tak, aby fungoval při nastavování režimu "RUST_BUILD_ASSERT_{WARN,ALLOW}" pro moduly.
fs modul přidán který poskytuje odkazy pro práci se souborovými systémy. Je navržen příklad jednoduchého souborového systému napsaného v Rustu a také modul fronty úloh přidaný pro práci se systémovými frontami.
Z dalších změn které vyčnívají z tohoto nového návrhu:
- Přidán samostatný konfigurační soubor "kernel/configs/rust.config".
- Soubory "*.i" zpracované v substitucích maker byly přejmenovány na "*.rsi".
- Odstraněna podpora pro vytváření komponent Rust s jinými úrovněmi optimalizace, než které se používají pro kód C.
- Vývoj modulu kasync pokračoval implementací metod asynchronního programování (async).
- Přidán příklad TCP serveru na úrovni jádra napsaného v Rustu a přidána schopnost zpracovávat přerušení v Rustu.
- Přidáno makro procedury, které usnadňuje práci s tabulkami ukazatelů funkcí, jako je struktura file_operations.
- Přidána implementace obousměrného propojeného seznamu "unsafe_list::List".
- Přidána počáteční podpora pro RCU a typ Guard pro kontrolu, zda je zámek čtení vázán na aktuální vlákno.
- Přidána funkce Task::spawn() pro automatické vytváření a spouštění vláken jádra.
- Byla také přidána metoda Task::wake_up() .
- Přidán zpožďovací modul
Konečně pokud máte zájem o tom vědět více, můžete zkontrolovat podrobnosti Na následujícím odkazu.