Το Crustc, ένας μεταγλωττιστής Rust που δημιουργήθηκε μεταφράζοντας τον βασικό μεταγλωττιστή rustc 1.98.0-nightly σε C, έχει δημοσιευτεί. Ο μεταγλωττιστής που προκύπτει περιέχει 46 εκατομμύρια γραμμές κώδικα C, οι οποίες μπορούν να μεταγλωττιστούν χρησιμοποιώντας το GCC και το βοηθητικό πρόγραμμα make. Ο μεταγλωττιστής, που έχει κατασκευαστεί με αυτόν τον τρόπο, περνάει με επιτυχία τις δοκιμές μεταγλώττισης για κώδικα Rust, όπως οι τυπικές βιβλιοθήκες Rust.
Αυτό το έργο καταδεικνύει τις δυνατότητες του μεταγλωττιστή cilly, ο οποίος βρίσκεται σε εξέλιξη και επιτρέπει τη μετάφραση έργων Rust σε C. Στόχος αυτής της μετάφρασης είναι να καταστεί δυνατή η μεταγλώττιση κώδικα που γράφτηκε αρχικά σε Rust σε περιβάλλοντα συστημάτων και σε αρχιτεκτονικές που δεν υποστηρίζονται από τον μεταγλωττιστή rustc. Ο κώδικας εξόδου είναι ANSI C (C89), επιτρέποντας ενδεχομένως τη μεταγλώττιση έργων σε παλαιότερα συστήματα που δεν υποστηρίζονται από LLVM και GCC, αλλά για τα οποία είναι διαθέσιμος ένας μεταγλωττιστής ANSI C. Ο μεταγλωττιστής cilly δεν είναι ακόμη διαθέσιμος στο κοινό και θα δημοσιευτεί μόλις είναι έτοιμος για εκτεταμένες δοκιμές. Το έργο βρίσκεται στα χέρια ενός μόνο ενθουσιώδους εδώ και τρία χρόνια.
Το Cilly υλοποιείται ως backend για το rustc, μεταφράζοντας την εσωτερική αναπαράσταση του Rust σε πηγαίο κώδικα C. Ένα μοναδικό χαρακτηριστικό του cilly είναι ότι κάθε μετάφραση εκτελείται με γνώμονα μια συγκεκριμένη πλατφόρμα και έναν μεταγλωττιστή C-στόχο. Κατά τη φάση επαλήθευσης, το cilly δημιουργεί το προφίλ του μεταγλωττιστή C-στόχου χρησιμοποιώντας δοκιμές που βασίζονται στη δημιουργία ενός συνόλου μίνι-προγραμμάτων που αξιολογούν την υποστήριξη για συγκεκριμένες λειτουργίες (για παράδειγμα, _Thread_local) και καθορίζουν τις λεπτομέρειες της πλατφόρμας, όπως τα μεγέθη τύπων, την ευθυγράμμιση δεδομένων μνήμης και τη διάταξη δομής.
Πηγή: opennet.ru
