
Eurydice: Rust'u yüksek güvenilirlikli programlar için okunabilir C'ye derleme
Eurydice, Aeneas projesinin bir parçası olarak Rust kodunu okunabilir C'ye dönüştürür ve programın yapısını korur. Doğrulama ve uyumluluk araçlarının C kaynağı istediği yüksek güvenilirlikli programlar için tasarlanmıştır.
Rust'tan C'ye yüksek güvenilirlikli kod için dönüştürücü
Eurydice, Rust programlarını C kaynak koduna dönüştüren ve kodun özgün yapısını koruyan bir araştırma projesidir. Mevcut doğrulama ve uyumluluk araçlarının girdi olarak C istediği yüksek güvenilirlikli yazılım projelerine yöneliktir. Bu araçlar doğrudan Rust ile çalışmayı öğrenirken Eurydice daha sorunsuz bir geçiş sunar; C derleyicisi olan ama çalışan Rust derleyicisi olmayan ortamlar için de bir basamak taşı olabilir. Proje, post-kuantum kriptografinin birkaç rutinini Rust'tan C'ye derlemek için zaten kullanılmıştır.
Eurydice 2023'te başladı ve MIT ile Apache-2.0 koşullarının bir karışımıyla lisanslanmıştır. Rust kodu üzerinde resmi doğrulama araçları geliştiren Aeneas projesinin parçasıdır. Aeneas projeleri, Fransa'nın ulusal bilgisayar bilimi araştırma enstitüsü Inria ve Microsoft çalışanları tarafından sürdürülür ve dış katkı kabul eder.
Optimizasyon yerine yapıyı koruma
Çoğu derleyici gibi Eurydice bir Rust programını alır, ara temsile dönüştürür, dönüşüm serisi uygular ve kodu daha düşük seviyeli bir dilde, burada C'de üretir. Ayırt edici amacı, çıktının kaynağın genel yapısını korurken Rust'ta var olan ancak C'de olmayan yapıları kaldırmasıdır. Özgün değerlendirme sırasının belirlenmesi gereken yerlerde araç geçici ek değişkenler ekler. Aynı fonksiyonların rustc ile derlenmesi ise tam tersine, tam bit manipülasyonu işlemleriyle dolu karmaşık döngüler üretir; bu makine kodu için uygundur ama çok daha az okunabilir.
Çevirinin zorlaştığı yerler
Her Rust programının sadık biçimde C'de temsil edilmesi mümkün değildir. İteratöre dayalı, aralık yerine for döngüleri, Eurydice'nin yardım kodunun iteratör durumunu yönetmek için kullanacağı while döngülerine derlenmelidir. C'de jenerik olmadığı için dönüştürme sırasında Rust kodu monomorfize edilmelidir; bu, yalnızca tipe göre farklılaşan fonksiyonların birden fazla uygulamasıyla sonuçlanabilir. Dinamik boyutlu tipler özellikle zorluk çıkarır: Eurydice iki temsil üretir, biri esnek dizi üyesi, diğeri bilinen uzunlukta dizi üyesi. Aralarında geçiş çalışma zamanında hiçbir şey yapmaz, ancak teknik olarak C'nin katı aliasing kuralını ihlal eder; bu yüzden proje üretilen kodu -fno-strict-aliasing bayrağıyla derlemeyi önerir.
Mevcut sınırlamalar ve eşlik eden araçlar
Eurydice, KaRaMeL'e dayanır; KaRaMeL aynı yaklaşımı daha soyut bir dili yapılandırılmış C'ye derlemek için kullanır, burada F* programlama dili için. Kendi ayrıştırıcısını ve tip denetleyicisini yerleştirmek yerine Eurydice, rustc'den işlenmiş ve önceden işlenmiş programı alıp orta düzey ara temsilini JSON olarak dışa aktaran başka bir Aeneas aracı Charon'a güvenir. Uygulamada Charon, const generics gibi Rust'ın yeni özellikleriyle sık sık sorun yaşar; bu yüzden Eurydice şu anda karmaşık Rust özelliklerini görmezden gelen küçük, kendi kendine yeten programlarda en iyi çalışır. Özgün değerlendirme yazarı, aracın en değerli olduğunun, Rust kodu değişmeye devam ederken C sürümünü senkron tutmak için otomatik bir yol gerektiğinde olduğunu söylüyor. Eurydice, Rust kodunu daha fazla ortama uyarlayan hızla büyüyen araç koleksiyonundaki en yeni kayıttır.
Kaynaklar: lwn.net
SiTech — AI destekli web geliştirme
Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.