Κυκλοφορία της γλώσσας προγραμματισμού Rust 1.74. Έλεγχος RustVMM. Ξαναγράφοντας Binder in Rust

Δημοσιεύτηκε η κυκλοφορία της γλώσσας προγραμματισμού γενικής χρήσης Rust 1.74, που ιδρύθηκε από το έργο Mozilla, αλλά τώρα αναπτύχθηκε υπό την αιγίδα του ανεξάρτητου μη κερδοσκοπικού οργανισμού Rust Foundation. Η γλώσσα εστιάζει στην ασφάλεια της μνήμης και παρέχει τα μέσα για την επίτευξη υψηλού παραλληλισμού εργασιών, αποφεύγοντας τη χρήση απορριμματοσυλλέκτη και χρόνου εκτέλεσης (ο χρόνος εκτέλεσης μειώνεται στη βασική προετοιμασία και συντήρηση της τυπικής βιβλιοθήκης).

Οι μέθοδοι χειρισμού μνήμης του Rust σώζουν τον προγραμματιστή από σφάλματα κατά τον χειρισμό δεικτών και προστατεύουν από προβλήματα που προκύπτουν λόγω χειρισμού μνήμης χαμηλού επιπέδου, όπως πρόσβαση σε μια περιοχή μνήμης μετά την απελευθέρωσή της, αποαναφορά μηδενικών δεικτών, υπερβάσεις buffer κ.λπ. Για τη διανομή βιβλιοθηκών, την παροχή κατασκευών και τη διαχείριση εξαρτήσεων, το έργο αναπτύσσει τον διαχειριστή πακέτων Cargo. Το αποθετήριο crates.io υποστηρίζεται για τη φιλοξενία βιβλιοθηκών.

Η ασφάλεια της μνήμης παρέχεται στο Rust κατά τη στιγμή της μεταγλώττισης μέσω ελέγχου αναφοράς, παρακολούθησης της ιδιοκτησίας αντικειμένων, παρακολούθησης της διάρκειας ζωής των αντικειμένων (πεδίων) και αξιολόγησης της ορθότητας της πρόσβασης στη μνήμη κατά την εκτέλεση του κώδικα. Το Rust παρέχει επίσης προστασία έναντι υπερχείλισης ακεραίων, απαιτεί υποχρεωτική αρχικοποίηση τιμών μεταβλητών πριν από τη χρήση, χειρίζεται καλύτερα τα σφάλματα στην τυπική βιβλιοθήκη, εφαρμόζει την έννοια των αμετάβλητων αναφορών και μεταβλητών από προεπιλογή, προσφέρει ισχυρή στατική πληκτρολόγηση για την ελαχιστοποίηση των λογικών σφαλμάτων.

Βασικές καινοτομίες:

  • Προστέθηκε η δυνατότητα ρύθμισης των ελέγχων χνούδι μέσω του αρχείου Cargo.toml με το μανιφέστο διαχείρισης πακέτων. Για τον καθορισμό των ρυθμίσεων χνούδι, όπως το επίπεδο απόκρισης (απαγόρευση, άρνηση, προειδοποίηση, επιτρέπονται), προτείνονται νέες ενότητες "[lints]" και "[workspace.lints]", οι αλλαγές στις οποίες λαμβάνονται υπόψη κατά τη λήψη απόφασης σχετικά με ανακατασκευή. Για παράδειγμα, αντί να καθορίζετε τις σημαίες «-F», «-D», «-W» και «-A» κατά τη συναρμολόγηση ή την προσθήκη των «#![forbid(unsafe_code)]» και «#![deny(clippy) :” χαρακτηριστικά στον κώδικα) :enum_glob_use)]" μπορεί τώρα να χρησιμοποιηθεί στο μανιφέστο Cargo: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "άρνηση"
  • Ο διαχειριστής πακέτων Crate έχει προσθέσει τη δυνατότητα ελέγχου ταυτότητας κατά τη σύνδεση σε ένα αποθετήριο. Το βασικό πακέτο περιλαμβάνει υποστήριξη για την τοποθέτηση παραμέτρων ελέγχου ταυτότητας σε καταστήματα διαπιστευτηρίων Linux (με βάση το libsecret), macOS (Keychain) και Windows (Windows Credential Manager), αλλά το σύστημα είναι αρχικά αρθρωτό και σας επιτρέπει να οργανώσετε την εργασία με διάφορους παρόχους για αποθήκευση και δημιουργώντας διακριτικά, για παράδειγμα, έχει προετοιμαστεί ένα πρόσθετο για τη χρήση του διαχειριστή κωδικών πρόσβασης 1Password. Ενδέχεται να απαιτείται έλεγχος ταυτότητας από το αποθετήριο για οποιαδήποτε λειτουργία, όχι απλώς για να επιβεβαιωθεί ότι έχουν δημοσιευτεί τα πακέτα. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Η υποστήριξη για προβολές τύπου επιστροφής (impl_trait_projections) έχει σταθεροποιηθεί, επιτρέποντας στους Self και T::Assoc να αναφέρονται σε τύπους επιστροφής όπως "async fn" και "->impl Trait". struct Wrapper<'a, T>(&'a T); // Αδιαφανείς τύποι επιστροφής που αναφέρουν `Self`: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } χαρακτηριστικό γνώρισμα<'a> { type Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // Αδιαφανείς τύποι επιστροφής που αναφέρουν συσχετισμένο τύπο: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • Ένα νέο τμήμα του API έχει μετακινηθεί στην κατηγορία των σταθερών, συμπεριλαμβανομένων των μεθόδων και των εφαρμογών των χαρακτηριστικών έχουν σταθεροποιηθεί:
  • Το χαρακτηριστικό "const", το οποίο καθορίζει τη δυνατότητα χρήσης του σε οποιοδήποτε πλαίσιο αντί για σταθερές, χρησιμοποιείται στις συναρτήσεις:
    • πυρήνας::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • πυρήνας::αριθμός::Κορεσμός
    • impl From για std::process::Stdio
    • impl From για std::process::Stdio
    • impl From για std::process::Child{Stdin, Stdout, Stderr}
    • impl From για std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Σφάλμα::άλλο
    • impl TryFrom για u16
    • υπονοώ Από<&[T; N]>για Vec
    • υπονοώ Από<&mut [T; N]>για Vec
    • υπονοώ Από<[T; N]> για Arc<[T]>
    • υπονοώ Από<[T; N]> για Rc<[T]>
  • Ο μεταγλωττιστής, το κιτ εργαλείων, η τυπική βιβλιοθήκη και τα εκτελέσιμα αρχεία εφαρμογών που δημιουργούνται έχουν αυξήσει τις απαιτήσεις για τις πλατφόρμες της Apple, απαιτώντας πλέον τουλάχιστον το macOS 10.12 Sierra, το iOS 10 και το tvOS 10 που κυκλοφόρησε το 2016 για να εκτελεστεί.
  • Το τρίτο επίπεδο υποστήριξης έχει εφαρμοστεί για την πλατφόρμα i686-pc-windows-gnullvm. Το τρίτο επίπεδο περιλαμβάνει βασική υποστήριξη, αλλά χωρίς αυτοματοποιημένες δοκιμές, δημοσίευση επίσημων εκδόσεων ή έλεγχο του αν μπορεί να κατασκευαστεί ο κώδικας.
  • Το δεύτερο επίπεδο υποστήριξης για την πλατφόρμα στόχου loongarch64-unknown-none έχει υλοποιηθεί. Το δεύτερο επίπεδο υποστήριξης περιλαμβάνει εγγύηση συναρμολόγησης.

Επιπλέον, μπορούν να σημειωθούν δύο συμβάντα που σχετίζονται με τη γλώσσα Rust:

  • Το OSTIF (Open Source Technology Improvement Fund), που δημιουργήθηκε για την ενίσχυση της ασφάλειας έργων ανοιχτού κώδικα, δημοσίευσε τα αποτελέσματα ενός ελέγχου του έργου RustVMM, το οποίο παρέχει στοιχεία για τη δημιουργία hypervisors και οθονών εικονικής μηχανής (VMM) ειδικά για εργασίες. Στην ανάπτυξη του έργου συμμετέχουν εταιρείες όπως η Intel, η Alibaba, η Amazon, η Google, η Linaro και η Red Hat. Οι υπερεπόπτες Intel Cloud Hypervisor και Dragonball αναπτύσσονται με βάση το RustVMM. Ο έλεγχος επιβεβαίωσε την υψηλή ποιότητα της βάσης κώδικα και τη χρήση τεχνικών στην αρχιτεκτονική και την υλοποίηση με στόχο την επίτευξη της μέγιστης ασφάλειας. Κατά τον έλεγχο εντοπίστηκαν 6 προβλήματα που δεν είχαν άμεσο αντίκτυπο στην ασφάλεια.
  • Η Google εισήγαγε μια νέα εφαρμογή του μηχανισμού επικοινωνίας διαδικασιών Binder, που ξαναγράφεται στη γλώσσα Rust, στη λίστα αλληλογραφίας προγραμματιστών του πυρήνα Linux. Η επανάληψη πραγματοποιήθηκε ως μέρος ενός έργου για την ενίσχυση της ασφάλειας, την προώθηση τεχνικών ασφαλούς προγραμματισμού και την αύξηση της αποτελεσματικότητας του εντοπισμού προβλημάτων κατά την εργασία με μνήμη στο Android (περίπου το 70% όλων των επικίνδυνων τρωτών σημείων που εντοπίζονται στο Android προκαλούνται από σφάλματα κατά την εργασία με μνήμη ). Η υλοποίηση του Binder in Rust έχει επιτύχει ισοτιμία στη λειτουργικότητα με την αρχική έκδοση στη γλώσσα C, περνάει όλες τις δοκιμές AOSP (Android Open-Source Project) και μπορεί να χρησιμοποιηθεί για τη δημιουργία λειτουργικών εκδόσεων υλικολογισμικού. Η απόδοση και των δύο υλοποιήσεων είναι περίπου στο ίδιο επίπεδο (αποκλίσεις εντός -1.96% και +1.38%).

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο