Rust dil dəstəyi ilə Linux nüvəsi üçün yamaqların altıncı 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 v6 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 yeddinci nəşridir. Rust dəstəyi eksperimental hesab olunur, lakin artıq Linux-növbəti filialına daxil edilib və nüvə alt sistemləri üzərində abstraksiya qatlarının yaradılması, həmçinin drayverlərin və modulların yazılması üzərində işə başlamaq üçün kifayət qədər işlənib hazırlanıb. İnkişaf Google və Let's Encrypt layihəsinin yaradıcısı olan və HTTPS-i və internet 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ətinin mümkün generasiyasından azad edilən ayırma kitabxanasının variantı, nüvə yamaqlarında istifadə edilən "belki_uninit_extra" rejiminin dəstəyini stabilləşdirən Rust 1.60 buraxılışına qədər yeniləndi.
  • Kernel API ilə əlaqəli testlərin kernel yüklənməsi zamanı yerinə yetirilən KUnit testlərinə kompilyasiya müddətinə çevrilməsi yolu ilə sənədlərdən (sənədlərdə nümunə kimi istifadə olunan testlər) testlər aparmaq imkanı əlavə edildi.
  • Testlərin Rust kernel kodu kimi Clippy linter xəbərdarlığı ilə nəticələnməməsi ilə bağlı tələblər qəbul edilmişdir.
  • Şəbəkə funksiyaları ilə “şəbəkə” modulunun ilkin tətbiqi təklif olunur. Rust kodu Namespace (struct net kernel strukturuna əsasən), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_inqui) və onların IP-ləri kimi nüvə şəbəkə strukturlarına çıxışı var. .
  • Kasync modulu şəklində həyata keçirilən asinxron proqramlaşdırma üsulları (async) üçün ilkin dəstək var. Məsələn, siz TCP yuvalarını manipulyasiya etmək üçün asinxron kod yaza bilərsiniz: async fn echo_server(axın: TcpStream) -> Nəticə { let mut buf = [0u8; 1024]; loop { qoy n = axın.oxu (&mut buf).gözləyin?; əgər n == 0 { qaytarın Ok(()); } stream.write_all(&buf[..n]).gözləyin?; } }
  • Şəbəkə paket filtrləri ilə manipulyasiya etmək üçün əlavə edilmiş net::filter modulu. Rust dilində filtr tətbiqi ilə rust_netfilter.rs nümunəsi əlavə edildi.
  • Sadə mutex smutex::Mutex-in tətbiqi əlavə edildi, bu da bərkidilmə tələb etmir.
  • Əlavə edilmiş NoWaitLock, heç vaxt kilidi gözləməyən və əgər başqa mövzu ilə məşğul olarsa, zəng edəni dayandırmaq əvəzinə kilidi əldə etməyə cəhd edərkən xətanın bildirilməsinə səbəb olur.
  • Boş ola bilməyən bölmələrə tətbiq etmək üçün nüvədə raw_spinlock_t tərəfindən müəyyən edilmiş RawSpinLock əlavə edildi.
  • İstinad hesablama mexanizminin tətbiq olunduğu obyektə istinadlar üçün ARef növü əlavə edildi (həmişə yenidən hesablanır).
  • Rustc-ni GCC-də mövcud olan arxitektura və optimallaşdırmalara dəstək vermək üçün rustc-da kod generatoru kimi GCC layihəsindəki libgccjit kitabxanasından istifadə etməyə imkan verən rustc_codegen_gcc backend rustc kompilyatorunu yükləmək qabiliyyətini həyata keçirmişdir. Kompilyatorun təşviqi rustc kompilyatorunun özünü qurmaq üçün rustc-də GCC əsaslı kod generatorundan istifadə etmək imkanı deməkdir. Bundan əlavə, GCC 12.1-in son buraxılışı rustc_codegen_gcc-nin düzgün işləməsi üçün zəruri olan libgccjit-ə düzəlişləri ehtiva edir. Rustup yardım proqramından istifadə edərək rustc_codegen_gcc quraşdırma imkanını təmin etmək üçün hazırlıqlar aparılır.
  • GCC-yə əsaslanan Rust dili kompilyatorunun tətbiqi ilə GCC frontend gccrs-nin inkişafında irəliləyiş qeyd olunur. Hazırda gccrs üzərində işləyən iki tam zamanlı tərtibatçı var.

Xatırladaq ki, 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əyən və kernel üçün tələb olunan qurma asılılıqları sırasına Rust-un daxil edilməsi ilə nəticələnməyən seçim kimi təqdim olunur. Sürücüləri inkişaf etdirmək üçün Rust-dan istifadə sizə minimum səylə yaddaş sahəsinə daxil olmaq, boş göstəricilərə istinad etmək və bufer aşmaq kimi problemlərdən azad olaraq 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

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