Μιγκέλ Οτζέντα, συγγραφέας του έργου Rust-for-Linux κυκλοφόρησε την όγδοη κυκλοφορία της ανάπτυξης ενημερώσεων κώδικα του πυρήνα Linux με υποστήριξη γλώσσας Rust για προγραμματιστές πυρήνα Linux που πρέπει να εξετάσουν.
Αυτό κατατάσσεται ως η ένατη έκδοση των ενημερώσεων κώδικα (λαμβάνοντας υπόψη την πρώτη έκδοση χωρίς αριθμό έκδοσης). Η υποστήριξη σκουριάς θεωρείται πειραματική, αλλά περιλαμβάνεται ήδη στον κλάδο του linux-next, ισχυρίζεται για ενσωμάτωση στην φθινοπωρινή έκδοση 5.20/6.0 και είναι αρκετά προηγμένο ώστε να αρχίσει να εργάζεται για τη δημιουργία επιπέδων αφαίρεσης πάνω από τα υποσυστήματα του πυρήνα, καθώς και τη σύνταξη ελεγκτών και λειτουργικών μονάδων.
Η ανάπτυξη χρηματοδοτείται από την Google και το ISRG (Internet Security Research Group), που είναι ο ιδρυτής του έργου Let's Encrypt και προωθεί το HTTPS και την ανάπτυξη τεχνολογιών για την αύξηση της ασφάλειας στο Διαδίκτυο.
Οι προτεινόμενες αλλαγές καθιστούν δυνατή τη χρήση της Rust ως δεύτερης γλώσσας για την ανάπτυξη προγραμμάτων οδήγησης και λειτουργικών μονάδων πυρήνα. Η υποστήριξη Rust παρουσιάζεται ως μια επιλογή που δεν είναι ενεργοποιημένη από προεπιλογή και δεν έχει ως αποτέλεσμα το Rust να συμπεριλαμβάνεται στις απαιτούμενες εξαρτήσεις κατασκευής για τον πυρήνα. Η χρήση του Rust για την ανάπτυξη προγραμμάτων οδήγησης θα σας επιτρέψει να δημιουργήσετε καλύτερα και ασφαλέστερα προγράμματα οδήγησης με ελάχιστη προσπάθεια, χωρίς προβλήματα όπως πρόσβαση σε μια περιοχή μνήμης μετά την απελευθέρωσή της, αποσύνδεση μηδενικών δεικτών και υπερχείλιση buffer.
Η ασφάλεια της μνήμης παρέχεται στο Rust κατά το χρόνο μεταγλώττισης ελέγχοντας τις αναφορές, την παρακολούθηση της ιδιοκτησίας αντικειμένου και τη διάρκεια ζωής του αντικειμένου (πεδίο), καθώς και με την αξιολόγηση της ορθότητας της πρόσβασης στη μνήμη κατά την εκτέλεση του κώδικα.
Τι νέο υπάρχει σε αυτήν την όγδοη κυκλοφορία;
Στη νέα αυτή πρόταση που κυκλοφόρησε αναφέρεται ότι την παραλλαγή της βιβλιοθήκης alloc, το οποίο εξάλειψε την πιθανή δημιουργία κατάστασης "πανικού" σε σφάλματα, ενημερώθηκε στην έκδοση Rust 1.62. Σε σύγκριση με την προηγούμενη έκδοση, το κιτ εργαλείων Rust έχει σταθεροποιήσει την υποστήριξη για τη λειτουργικότητα const_fn_trait_bound που χρησιμοποιείται στις ενημερώσεις κώδικα του πυρήνα.
Εκτός από αυτό ο κωδικός δεσμευτικών χωρίζεται σε μια δέσμη πλαισίων «δεσμών». ξεχωριστά, γεγονός που καθιστά εύκολη την ανακατασκευή εάν αλλάξει μόνο το κύριο πακέτο πυρήνα.
ο υλοποίηση της μακροεντολής "concat_idents!", Γράφτηκε ξανά ως διαδικαστική μακροεντολή, δεν συνδέεται με τη λειτουργικότητα concat_idents και επιτρέπει τη χρήση τοπικών παραπομπών μεταβλητών.
Επιπλέον, αναφέρεται ότι η μακρο "static_assert!" έχει ξαναγραφτεί για να επιτρέπεται το "core::assert!()" χρησιμοποιείται σε οποιοδήποτε πλαίσιο αντί για σταθερές, ενώ η μακροεντολή "construction_error!" έχει προσαρμοστεί για να λειτουργεί κατά τη ρύθμιση της λειτουργίας "RUST_BUILD_ASSERT_{WARN,ALLOW}" για μονάδες.
προστέθηκε μονάδα fs που παρέχει συνδέσμους για εργασία με συστήματα αρχείων. Προτείνεται ένα παράδειγμα απλού συστήματος αρχείων γραμμένου σε Rust, καθώς και η μονάδα ουράς εργασιών που προστέθηκε για εργασία με ουρές συστήματος.
Από τις άλλες αλλαγές που ξεχωρίζουν από αυτή τη νέα πρόταση:
- Προστέθηκε ένα ξεχωριστό αρχείο διαμόρφωσης "kernel/configs/rust.config".
- Τα αρχεία "*.i" που επεξεργάζονται σε αντικαταστάσεις μακροεντολών έχουν μετονομαστεί σε "*.rsi".
- Καταργήθηκε η υποστήριξη για την κατασκευή στοιχείων Rust με επίπεδα βελτιστοποίησης διαφορετικά από αυτά που χρησιμοποιούνται για τον κώδικα C.
- Η ανάπτυξη της ενότητας kasync συνεχίστηκε με την εφαρμογή μεθόδων ασύγχρονου προγραμματισμού (async).
- Προστέθηκε ένα παράδειγμα διακομιστή TCP σε επίπεδο πυρήνα γραμμένο σε Rust και προστέθηκε η δυνατότητα χειρισμού διακοπών στο Rust.
- Προστέθηκε μια μακροεντολή διαδικασίας για να διευκολύνεται η εργασία με πίνακες δεικτών συναρτήσεων, όπως η δομή file_operations.
- Προστέθηκε εφαρμογή αμφίδρομης συνδεδεμένης λίστας "unsafe_list::List".
- Προστέθηκε αρχική υποστήριξη για το RCU και τον τύπο Guard για να ελέγξετε εάν ένα κλείδωμα ανάγνωσης είναι συνδεδεμένο στο τρέχον νήμα.
- Προστέθηκε η συνάρτηση Task::spawn() για αυτόματη αναπαραγωγή και εκκίνηση νημάτων πυρήνα.
- Προστέθηκε επίσης η μέθοδος Task::wake_up().
- Προστέθηκε μια ενότητα καθυστέρησης
Τελικά αν ενδιαφέρεστε να μάθετε περισσότερα γι 'αυτό, μπορείτε να ελέγξετε τις λεπτομέρειες Στον ακόλουθο σύνδεσμο.