უკან დაბრუნება
Eurydice: Rust-ის შედგენა წაკითხვად C-ში მაღალსაიმედო პროგრამებისთვის
SiTech AI Team3 წთ. საკითხავი

Eurydice: Rust-ის შედგენა წაკითხვად C-ში მაღალსაიმედო პროგრამებისთვის

Eurydice, Aeneas-ის პროექტის ნაწილი, Rust-ის კოდს წაკითხვად C-ად გარდაქმნის და პროგრამის სტრუქტურას ინარჩუნებს. ის მაღალსაიმედო პროგრამებისთვისაა განკუთვნილი, სადაც ვერიფიკაციისა და შესაბამისობის ხელსაწყოები C-ს მოითხოვენ.

Rust-იდან C-ში გადამყვანი მაღალსაიმედო კოდისთვის

Eurydice არის კვლევითი პროექტი, რომელიც Rust-ის პროგრამებს C-ის წყარო კოდად გარდაქმნის და კოდის თავდაპირველ სტრუქტურას უცვლელად ინარჩუნებს. ის მიმართულია მაღალსაიმედო პროგრამული პროექტებისკენ, სადაც არსებული ვერიფიკაციისა და შესაბამისობის ხელსაწყოები შესავალ მონაცემად C-ს მოითხოვენ. სანამ ასეთი ხელსაწყოები პირდაპირ Rust-თან მუშაობას ისწავლიან, Eurydice უფრო გლუვ გადასვლის გზას გვთავაზობს და ასევე შეიძლება იქცეს საფეხურად იმ გარემოებისთვის, სადაც C-ის კომპილატორია, მაგრამ მომუშავე Rust-ის კომპილატორი არ არის. პროექტი უკვე გამოყენებულია პოსტკვანტური კრიპტოგრაფიის რამდენიმე რუტინის Rust-იდან C-ში გადასაკომპილირებლად.

Eurydice 2023 წელს დაიწყო და MIT-ისა და Apache-2.0-ის პირობების ნარევითაა ლიცენზირებული. ის Aeneas-ის პროექტის ნაწილია, რომელიც Rust-ის კოდზე ფორმალური ვერიფიკაციის გამოყენების ხელსაწყოებს ქმნის. Aeneas-ის პროექტებს ინარჩუნებენ Inria-ს, საფრანგეთის კომპიუტერული მეცნიერების ეროვნული კვლევითი ინსტიტუტის და Microsoft-ის თანამშრომლები, და ისინი გარე წვლილს იღებენ.

სტრუქტურის შენარჩუნება ოპტიმიზაციის ნაცვლად

როგორც კომპილატორების უმეტესობა, Eurydice იღებს Rust-ის პროგრამას, გარდაქმნის მას შუალედურ წარმოდგენად, ატარებს ტრანსფორმაციების სერიას და გამოაქვს კოდი უფრო დაბალი დონის ენაზე, ამ შემთხვევაში C-ზე. მისი განმასხვავებელი მიზანი კი ისაა, რომ გამომავალი წაკითხვადი შეინარჩუნოს წყაროს საერთო სტრუქტურის დაცვით და ამავდროულად მოაშოროს ის კონსტრუქციები, რომლებიც Rust-ში არსებობს, C-ში კი არა. იქ, სადაც ორიგინალის შეფასების რიგი უნდა განისაზღვროს, ხელსაწყო დამატებით დროებით ცვლადებს შემოაქვს. იმავე ფუნქციების rustc-ით კომპილირება, პირიქით, წარმოქმნის ჩახლართულ ციკლებს, სავსეს ბიტებით მანიპულირების ოპერაციებით, რაც მანქანური კოდის გამოსავლისთვისაა შესაფერისი, მაგრამ გაცილებით ნაკლებად წაკითხვადია.

სად რთულდება თარგმნა

ყველა Rust-ის პროგრამის ერთგულად წარმოდგენა C-ში შეუძლებელია. იტერატორზე დაფუძნებული, დიაპაზონის ნაცვლად, for ციკლები უნდა გადაკომპილირდეს while ციკლებად, რომლებიც Eurydice-ის დამხმარე კოდს მიმართავენ იტერატორის მდგომარეობის სამართავად. რადგან C-ს არ აქვს ჯენერიკების ცნება, კონვერტაციისას Rust-ის კოდი უნდა მონომორფიზდეს, რაც შეიძლება რამდენიმე იმპლემენტაციას წარმოქმნიდეს ფუნქციისა, რომლებიც მხოლოდ ტიპით განსხვავდებიან. დინამიკურად ზომადი ტიპები განსაკუთრებით დიდ გამოწვევას ქმნის: Eurydice ორ წარმოდგენას გამოსცემს, ერთს მოქნილი მასივის წევრით და მეორეს ცნობილი სიგრძის მასივის წევრით. მათ შორის გადაყვანა გაშვების დროს არაფერს აკეთებს, მაგრამ ტექნიკურად არღვევს C-ის მკაცრ ალიასინგის წესს, ამიტომ პროექტი გენერირებული კოდის -fno-strict-aliasing დროშით კომპილირებას გირჩევთ.

ამჟამინდელი შეზღუდვები და თანმხლები ხელსაწყოები

Eurydice ეფუძნება KaRaMeL-ს, რომელიც იმავე მიდგომას იყენებს უფრო აბსტრაქტული ენის სტრუქტურირებულ C-ში გადასაკომპილირებლად, ამ შემთხვევაში F* პროგრამირების ენისთვის. საკუთარი პარსერისა და ტიპების შემმოწმებლის დანერგვის ნაცვლად, Eurydice ეყრდნობა Charon-ს, სხვა Aeneas-ის ხელსაწყოს, რომ rustc-იდან ამოიღოს დამუშავებული და წინასწარ დამუშავებული პროგრამა და მისი საშუალო დონის შუალედური წარმოდგენა JSON-ად გამოიტანოს. პრაქტიკაში Charon-ს ხშირად უშლის ხელს Rust-ის უფრო ახალი თვისებები, როგორიცაა const generics, ამიტომ Eurydice ამჟამად საუკეთესოდ მუშაობს პატარა, თვითკმარ პროგრამებზე, რომლებიც რთულ Rust-ის თვისებებს გვერდს უვლიან. ორიგინალური მოხსენების ავტორი ამბობს, რომ ხელსაწყო ყველაზე მეტად ღირს მაშინ, როცა Rust-ის კოდი განაგრძობს ცვლილებას და საჭიროა ავტომატური გზა C-ის ვერსიის სინქრონში შესანარჩუნებლად. Eurydice მხოლოდ უახლესი ჩანაწერია სწრაფად მზარდ ხელსაწყოთა კოლექციაში, რომლებიც Rust-ის კოდს უფრო მეტ გარემოს შესაფერისად ადაპტირებენ.

წყაროები: lwn.net

SSiTech

SiTech — AI-გაძლიერებული ვებ დეველოპმენტი

ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.