Ana Sayfa

Tek İş Parçacıklı C++ ile Çok İş Parçacıklı Rust'ı Birleştirmek

1 dk okuma

Antithesis'in yazılım test platformu, Determinator adlı deterministik hipervizör üzerinde çalışır ve hataları bulmak için bir fuzzer kullanır. Bu fuzzer, kontrol sinyalleri göndererek test edilen sistemi manipüle eder. Fuzzer'ın mantıksal kısmı olan kontrolcü, başlangıç noktalarını ve girdileri belirlemekten sorumludur. Tek iş parçacıklı C++ ile yazılmış olan fuzzer, kontrolcülerle poll_for_inputs ve advertise_outputs gibi geri çağırım (callback) arayüzleri aracılığıyla etkileşime girer. Bu arayüzde fuzzer, kontrolcüye "nereden başlamalıyım ve ne yapmalıyım?" diye sorar, ardından aldığı çıktılarla "dediğini yaptım, işte sonuçlar" diyerek geri bildirimde bulunur.

Antithesis, yeni kontrol stratejilerini daha kolay uygulamak amacıyla fuzzer'a Rust ile çağrı yapma yeteneği eklemiştir. Ancak bu Rust kodu henüz üretimde kullanılmamaktadır. Rust tarafı, C++'ın geri çağırım tabanlı arayüzünün aksine, çok iş parçacıklı ve asenkron bir yapıya sahiptir. Rust kontrolcüsü, "buradan başla, bu girdileri ver ve çıktıları bekle (await)" şeklinde asenkron bir arayüz kullanır. Makale, tek iş parçacıklı, senkron C++ ile çok iş parçacıklı, asenkron Rust arasındaki bu arayüzün nasıl kurulduğunu detaylandırmaktadır. Odak noktası %90 oranında Rust tarafındaki teknik zorluklar ve çözümlerdir. Bu entegrasyon, farklı eşzamanlılık modellerine sahip dillerin bir arada çalışabilmesi için önemli bir örnek teşkil etmektedir.

İçgörü

Farklı programlama dillerinin ve eşzamanlılık modellerinin (senkron/asenkron, tek/çok iş parçacıklı) karmaşık sistemlerde nasıl bir arayüze sahip olabileceğini pratik bir örnekle gösteriyor.

Kaynak