-
Metode yang Diformalisasi untuk Mengompilasi C ke Rust yang Aman
-
Meskipun popularitas bahasa Rust meningkat pesat, banyak basis kode penting masih ditulis dalam C, dan menulis ulang secara manual tidak realistis. Karena itu, menerjemahkan C ke Rust secara otomatis muncul sebagai alternatif menarik.
-
Berbagai penelitian sebelumnya telah bergerak ke arah menangani semakin banyak bagian C dengan memanfaatkan fitur-fitur Rust (misalnya
unsafe). Namun, meskipun otomasi tampak menjanjikan, menghasilkan kode yang bergantung padaunsafeakan meniadakan jaminan keamanan memori yang disediakan Rust, sehingga keuntungan utama dari porting basis kode lama ke bahasa yang aman memori menghilang. -
Kami mengeksplorasi jalur lain untuk menerjemahkan C ke Rust yang aman, yaitu menghasilkan kode yang mematuhi sistem tipe Rust sehingga jaminan keamanan memori mudah dipenuhi.
-
Penelitian kami mencakup beberapa kontribusi unik:
- translasi berbasis tipe untuk sebagian C ke Rust yang aman
- analisis statis baru berbasis "pohon partisi" yang memungkinkan ekspresi aritmatika pointer C melalui slice dan operasi pemisahan di Rust
- analisis yang secara tepat menyimpulkan borrow mana yang harus bersifat mutable
- strategi kompilasi untuk tipe struct C yang kompatibel dengan pembedaan alokasi non-owner dan owner di Rust
-
Kami menerapkan metodologi ini pada basis kode C yang telah diverifikasi secara formal: perpustakaan kriptografi HACL* dan parser biner serta serializer EverParse. Hasilnya menunjukkan subset C yang kami dukung cukup untuk menerjemahkan kedua aplikasi tersebut ke Rust yang aman.
-
Hasil evaluasi menunjukkan bahwa untuk beberapa bagian yang melanggar disiplin aliasing Rust, refaktorasi operasional otomatis sudah memadai, dan pengaruh kinerja dari beberapa salinan strategis yang disisipkan hampir tidak signifikan.
-
Khususnya pada aplikasi pendekatan ini terhadap HACL*, 80.000 baris perpustakaan kriptografi terverifikasi yang mengimplementasikan semua algoritma modern berhasil ditulis sepenuhnya dalam Rust. Ini adalah kasus pertama.
1 komentar
Komentar Hacker News
Setelah mem-porting proyek ke Rust, saya menemukan beberapa kesimpulan
Kode basis C yang telah diverifikasi secara formal berbeda dari kode basis C sistem yang umum
Pada tahun 2002, para peneliti menerbitkan makalah tentang Cyclone, sebuah dialek C yang aman, dan menemukan bug keamanan saat mem-porting dari C ke Cyclone
Terjemahan langsung ke Rust dapat menghasilkan bagian aman dan tidak aman, dan pekerjaan manual dapat difokuskan untuk memverifikasi keamanan bagian yang tidak aman
Harapan terhadap pendekatan mengompilasi sebagian kecil dari C cukup rendah
Rasa ingin tahu tentang perbandingan dengan fitur konversi C di Zig
Pertanyaan apakah
C2Rustbisa menghasilkan kode yang benar secara formalJika pustaka C berfungsi, menerjemahkan dengan memanfaatkan ketidakamanan Rust bisa jadi bernilai
Menarik bahwa tingkat optimasi tinggi tidak begitu meningkatkan kecepatan Rust