Rust dilini destekleyen Linux çekirdeği için yamaların sekizinci sürümü

Rust-for-Linux projesinin yazarı Miguel Ojeda, Linux çekirdek geliştiricilerinin değerlendirmesi için Rust dilinde aygıt sürücüleri geliştirmek için v8 bileşenlerinin piyasaya sürülmesini önerdi. Bu, sürüm numarası olmadan yayınlanan ilk sürüm dikkate alınarak yamaların revize edilmiş sürümüdür. Rust desteği deneysel olarak kabul edilir, ancak halihazırda linux-sonraki dalına dahil edilmiştir, 5.20/6.0 sonbahar sürümüne entegre edildiği iddia edilmektedir ve sürücü yazmanın yanı sıra çekirdek alt sistemleri üzerinde soyutlama katmanları oluşturmaya başlamak için yeterince olgunlaşmıştır. ve modüller. Geliştirme, Google ve Let's Encrypt projesinin kurucusu olan ISRG (İnternet Güvenliği Araştırma Grubu) tarafından finanse ediliyor ve HTTPS'yi ve İnternet güvenliğini artıracak teknolojilerin geliştirilmesini destekliyor.

Yeni sürümde:

  • Araç seti ve alloc kütüphanesinin, hatalar oluştuğunda olası bir "panik" durumu oluşturmayan bir çeşidi, Rust 1.62 sürümü için güncellendi. Daha önce kullanılan sürümle karşılaştırıldığında Rust araç seti, çekirdek yamalarında kullanılan const_fn_trait_bound işlevselliğine yönelik desteği stabilize etti.
  • Bağlama kodu, yalnızca ana paket "çekirdeğinde" değişiklik yapılması durumunda yeniden oluşturmayı kolaylaştıran ayrı bir sandık paketi "bağlamalarına" ayrılır.
  • “concat_idents!” makrosunun uygulanması concat_idents işlevine bağlı olmayan ve yerel değişkenlere referansların kullanılmasına izin veren prosedürel bir makro biçiminde yeniden yazılmıştır.
  • “static_assert!” makrosu yeniden yazıldı ve sabitler yerine her bağlamda “core::assert!()” kullanımına izin verildi.
  • Makro "build_error!" modüller için “RUST_BUILD_ASSERT_{WARN,ALLOW}” modu ayarlandığında çalışacak şekilde uyarlanmıştır.
  • “kernel/configs/rust.config” ayarlarını içeren ayrı bir dosya eklendi.
  • Makro değişikliklerinde işlenen “*.i” dosyaları “*.rsi” olarak yeniden adlandırıldı.
  • C kodu için kullanılanlardan farklı optimizasyon seviyelerine sahip Rust bileşenleri oluşturma desteği durduruldu.
  • Dosya sistemleriyle çalışmak için bağlamalar sağlayan fs modülü eklendi. Rust'ta yazılmış basit bir dosya sisteminin bir örneği verilmiştir.
  • Sistem kuyruklarıyla çalışmak için çalışma kuyruğu modülü eklendi (work_struct ve workqueue_struct çekirdek yapıları üzerinden bağlamalar sağlar).
  • Kasync modülünün geliştirilmesi, eşzamansız programlama yöntemlerinin (async) uygulanmasıyla devam etti. Rust'ta yazılmış çekirdek düzeyinde bir TCP sunucusu örneği eklendi.
  • [Threaded]İşleyici türleri ve [Threaded]Registration` türlerini kullanarak Rust dilindeki kesintileri işleme yeteneği eklendi.
  • File_operations yapısı gibi işlev işaretçilerinin tablolarıyla çalışmayı kolaylaştırmak için "#[vtable]" prosedürel makrosu eklendi.
  • "unsafe_list::List" çift yönlü bağlantılı listelerin uygulanması eklendi.
  • Geçerli iş parçacığına bir okuma kilidinin bağlı olup olmadığını kontrol etmek için RCU (Okuma-kopyalama-güncelleme) ve Koruma türü için başlangıç ​​desteği eklendi.
  • Çekirdek iş parçacıklarını oluşturmak ve otomatik olarak başlatmak için Task::spawn() işlevi eklendi. Ayrıca Task::wake_up() yöntemi de eklendi.
  • Gecikmeleri kullanmanıza izin veren bir gecikme modülü eklendi (msleep() üzerinde bir sarmalayıcı).

Önerilen değişiklikler Rust'un sürücü ve çekirdek modüllerini geliştirmek için ikinci bir dil olarak kullanılmasını mümkün kılıyor. Rust desteği, varsayılan olarak etkin olmayan bir seçenek olarak sunulur ve Rust'un çekirdek için gerekli bir yapı bağımlılığı olarak dahil edilmesine yol açmaz. Sürücü geliştirme için Rust'u kullanmak, minimum çabayla, serbest bırakma sonrasında belleğe erişim, boş işaretçi referansları ve arabellek aşımları gibi sorunlardan arınmış, daha güvenli ve daha iyi sürücüler oluşturmanıza olanak tanır.

Rust'ta derleme zamanında referans kontrolü, nesne sahipliği ve nesne ömrünün (kapsam) izlenmesi ve ayrıca kod yürütme sırasında bellek erişiminin doğruluğunun değerlendirilmesi yoluyla güvenli bellek kullanımı sağlanır. Rust ayrıca tamsayı taşmalarına karşı koruma sağlar, kullanımdan önce değişken değerlerinin zorunlu olarak başlatılmasını gerektirir, standart kitaplıkta hataları daha iyi işler, değişmez referanslar ve değişkenler kavramını varsayılan olarak uygular, mantıksal hataları en aza indirmek için güçlü statik yazım sunar.

Kaynak: opennet.ru

Yorum ekle