Rust dilini dəstəkləyən Linux nüvəsi üçün yamaqların səkkizinci versiyası

Rust-for-Linux layihəsinin müəllifi Migel Ojeda Linux nüvəsi tərtibatçıları tərəfindən nəzərdən keçirilməsi üçün Rust dilində cihaz drayverlərinin hazırlanması üçün v8 komponentlərinin buraxılmasını təklif etdi. Bu, versiya nömrəsi olmadan dərc edilmiş ilk versiya nəzərə alınmaqla yamaqların yenidən işlənmiş versiyasıdır. Rust dəstəyi eksperimental sayılır, lakin artıq Linux-növbəti filialına daxil edilib, 5.20/6.0 payız buraxılışına inteqrasiya olunduğunu iddia edir və nüvə alt sistemləri üzərində abstraksiya qatlarının yaradılması, həmçinin drayverlərin yazılması üzərində işə başlamaq üçün kifayət qədər yetkindir. və modullar. İnkişaf Google və Let's Encrypt layihəsinin yaradıcısı olan və HTTPS-i və internetin təhlükəsizliyini yaxşılaşdırmaq üçün texnologiyaların inkişafını təşviq edən ISRG (İnternet Təhlükəsizliyi Araşdırma Qrupu) tərəfindən maliyyələşdirilir.

Yeni versiyada:

  • Alətlər dəsti və səhvlər baş verdikdə "çaxnaşma" vəziyyətinə yol verilməyən ayırma kitabxanasının variantı Rust 1.62-nin buraxılışı üçün yeniləndi. Əvvəllər istifadə edilmiş versiya ilə müqayisədə Rust alətlər dəsti kernel yamaqlarında istifadə edilən const_fn_trait_bound funksionallığı üçün sabitləşdirilmiş dəstəyi təmin etmişdir.
  • Bağlama kodu ayrı bir qutu paketi olan "bağlamalar"a ayrılır, bu, yalnız əsas "kernel" paketində dəyişikliklər edilərsə, yenidən qurulmasını asanlaşdırır.
  • “concat_idents!” Makronunun tətbiqi concat_idents funksionallığına bağlı olmayan və yerli dəyişənlərə istinadların istifadəsinə imkan verən prosedur makrosu şəklində yenidən yazılmışdır.
  • “Statik_assert!” makrosu yenidən yazılmışdır və sabitlərin əvəzinə istənilən kontekstdə “core::assert!()” istifadə etməyə imkan verir.
  • Makro "build_error!" modullar üçün “RUST_BUILD_ASSERT_{XƏBƏRDARLIQ,İCAZƏ VERİN}” rejimi təyin edildikdə işləmək üçün uyğunlaşdırılmışdır.
  • “kernel/configs/rust.config” parametrləri ilə ayrıca fayl əlavə edildi.
  • Makro əvəzetmələrdə işlənmiş “*.i” fayllarının adı “*.rsi” olaraq dəyişdirilib.
  • C kodu üçün istifadə edilənlərdən fərqli optimallaşdırma səviyyələri ilə Rust komponentlərinin yaradılmasına dəstək dayandırıldı.
  • Fayl sistemləri ilə işləmək üçün bağlamaları təmin edən fs modulu əlavə edildi. Rustda yazılmış sadə fayl sisteminin nümunəsi verilmişdir.
  • Sistem növbələri ilə işləmək üçün əlavə iş növbəsi modulu (work_struct və workqueue_struct nüvə strukturları üzərində bağlamaları təmin edir).
  • Kasync modulunun inkişafı asinxron proqramlaşdırma metodlarının (async) tətbiqi ilə davam etdi. Rust-da yazılmış əsas səviyyəli TCP server nümunəsi əlavə edildi.
  • [Threaded]Handler tipləri və [Threaded]Registration` növlərindən istifadə edərək Rust dilində kəsilmələri idarə etmək imkanı əlavə edildi.
  • file_operations strukturu kimi funksiya göstəricilərinin cədvəlləri ilə işləməyi asanlaşdırmaq üçün "#[vtable]" prosedur makrosu əlavə edildi.
  • "unsafe_list::List" iki istiqamətli əlaqəli siyahıların tətbiqi əlavə edildi.
  • Oxuma kilidinin cari mövzuya bağlı olub-olmadığını yoxlamaq üçün RCU (Oxu-kopya-yeniləmə) və Mühafizə növü üçün ilkin dəstək əlavə edildi.
  • Kernel mövzularını yaratmaq və avtomatik başlatmaq üçün Task::spawn() funksiyası əlavə edildi. Task::wake_up() metodunu da əlavə etdi.
  • Gecikmələrdən istifadə etməyə imkan verən gecikmə modulu əlavə edildi (msleep() üzərində sarğı).

Təklif olunan dəyişikliklər Rust dilini drayverlərin və nüvə modullarının hazırlanması üçün ikinci dil kimi istifadə etməyə imkan verir. Rust dəstəyi defolt olaraq aktivləşdirilməmiş seçim kimi təqdim olunur və Rustun nüvə üçün tələb olunan qurma asılılığı kimi daxil edilməsi ilə nəticələnmir. Sürücü inkişafı üçün Rust-dan istifadə, boşaldıqdan sonra yaddaşa giriş, sıfır göstərici referensiyaları və buferin aşılması kimi problemlərdən azad olaraq, minimum səylə daha təhlükəsiz və daha yaxşı drayverlər yaratmağa imkan verəcək.

Yaddaşın təhlükəsiz işləməsi Rust-da kompilyasiya zamanı istinad yoxlaması, obyekt sahibliyi və obyektin istifadə müddətini (əhatə dairəsini) izləmək, həmçinin kodun icrası zamanı yaddaşa girişin düzgünlüyünün qiymətləndirilməsi vasitəsilə təmin edilir. Rust həmçinin tam ədədlərin daşmasına qarşı qorunma təmin edir, istifadə etməzdən əvvəl dəyişən dəyərlərin məcburi işə salınmasını tələb edir, standart kitabxanada səhvləri daha yaxşı idarə edir, dəyişməz istinadlar və dəyişənlər konsepsiyasını standart olaraq tətbiq edir, məntiqi səhvləri minimuma endirmək üçün güclü statik yazma təklif edir.

Mənbə: opennet.ru

Добавить комментарий