Κυκλοφόρησε η έκδοση Rust 1.99.0. Η Microsoft έκανε το Rust κύρια γλώσσα

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

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

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

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

  • Το Rust σάς επιτρέπει πλέον να δημιουργείτε μεταβλητές συναρτήσεις που εξάγονται για κλήση από έργα C (C ABI). Το τελευταίο στοιχείο της λίστας παραμέτρων σε τέτοιες συναρτήσεις μπορεί να είναι η κατασκευή "...", η οποία αντιμετωπίζεται στο Rust χρησιμοποιώντας έναν ειδικό τύπο, τον VaList, ο οποίος λειτουργεί παρόμοια με τον va_list σε C. unsafe extern "C" fn sum(mut args: ...) -> i32 { let a = unsafe { args.next_arg:: () }; έστω b = μη ασφαλές { args.next_arg:: () }; a + b } fn foo() -> i32 { μη ασφαλές { sum(0i32, 2i32) } }
  • Οι συναρτήσεις Layout::for_value_raw, mem::size_of_val_raw και mem::align_of_val_raw έχουν σταθεροποιηθεί για να επιτρέπουν την ασφαλή αλλαγή μεγέθους και στοίχιση των δεικτών raw, συμπεριλαμβανομένης της χρήσης τύπων δυναμικού μεγέθους όπως οι φέτες, χωρίς την ανάγκη δημιουργίας αναφορών δεδομένων.
  • Η τεκμηρίωση συνιστά πλέον την αποφυγή απελευθέρωσης μνήμης που είχε στατική αναφορά με αόριστη διάρκεια ζωής (&'static) μέσω κλήσης στο Box::leak (round-trip unleaking), καθώς αυτή η ενέργεια θα μπορούσε ενδεχομένως να οδηγήσει σε προβλήματα λόγω ασυμβατότητας με μελλοντικές βελτιστοποιήσεις μεταγλωττιστών και μηχανισμούς κατανομής μνήμης που μπορούν να συνδεθούν. Αντί να δημιουργείται μια στατική αναφορά για προσωρινές μεταφορές ιδιοκτησίας, συνιστάται η χρήση ακατέργαστων δεικτών, για παράδειγμα, μέσω κλήσης στο Box::into_non_null.
  • Ένα νέο τμήμα του API έχει μετακινηθεί στην κατηγορία των σταθερών, συμπεριλαμβανομένων των μεθόδων και των εφαρμογών των χαρακτηριστικών έχουν σταθεροποιηθεί:
    • IntoIterator για το Box<[T; N]>
    • IntoIterator για &Box<[T; N]>
    • IntoIterator για &mut Box<[T; N]>
    • VecDeque::retain_back
    • πυρήνας::ffi::VaList
    • Πλαίσιο::into_non_null
    • Πλαίσιο::from_non_null
    • Vec::into_parts
    • Vec::from_parts
    • πυρήνας::mem::size_of_val_raw
    • πυρήνας::mem::align_of_val_raw
    • πυρήνας::alloc::Layout::for_value_raw
    • Σειρά χαρακτήρων::from_utf8_lossy_owned
    • συμβολοσειρά::FromUtf8Error::into_utf8_lossy
    • FusedIterator για StepBy
    • std::fs::set_times
    • std::fs::set_times_nofollow
  • Ο διαχειριστής πακέτων cargo διαθέτει πλέον ένα νέο ενσωματωμένο προφίλ "debug", παρόμοιο με το προφίλ "dev" (οι δυνατότητες debug και development έχουν προγραμματιστεί να διαχωριστούν στο μέλλον). Η σταδιακή μεταγλώττιση είναι απενεργοποιημένη από προεπιλογή κατά την κατασκευή στο CI.
  • Η πλατφόρμα-στόχος riscv64-unknown-linux-musl έχει μετακινηθεί στο επίπεδο υποστήριξης 2, το οποίο παρέχει εγγύηση κατασκευής αλλά όχι εγγύηση επιτυχίας στη σουίτα δοκιμών.

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

  • Η Microsoft έχει αναβαθμίσει την Rust σε γλώσσα Tier 1 και θα παρέχει πλήρη υποστήριξη σε όλα τα στάδια ανάπτυξης εντός της εταιρείας. Προηγουμένως, υποστήριξη Tier 1 παρεχόταν για C++, C# και TypeScript. Η Rust χρησιμοποιείται ήδη σε πάνω από 100 αποθετήρια της Microsoft. Μεταξύ άλλων, τα στοιχεία της Rust χρησιμοποιούνται ήδη σε προϊόντα όπως το Microsoft 365 και το Copilot, και έχει αναπτυχθεί ένα ειδικό backend για τη Rust, το rustc_codegen_utc, βασισμένο στον μεταγλωττιστή rustc, για τον μεταγλωττιστή MSVC.

    Η Microsoft αναφέρει τον κύριο στόχο της χρήσης του Rust για την ενίσχυση του κώδικα που είναι κρίσιμος για την ασφάλεια. Σύμφωνα με τον CTO του Microsoft Azure, περίπου το 70% όλων των ευπαθειών στο Windows προκαλούνται από προβλήματα διαχείρισης μνήμης που μπορούν να αποφευχθούν χρησιμοποιώντας το Rust.

  • Η Google το αφαίρεσε από τον πυρήνα. Linux Η παλιά υλοποίηση του Binder IPC, γραμμένη σε C, έχει καταργηθεί υπέρ ενός νέου προγράμματος οδήγησης Binder IPC που ξαναγράφτηκε σε Rust. Σημειώνεται ότι κατά τη διάρκεια των 15 ετών ύπαρξής του, το παλιό πρόγραμμα οδήγησης έχει συσσωρεύσει σημαντικό τεχνικό χρέος και πολυάριθμες επιπλοκές, οι οποίες έχουν εμποδίσει την ανίχνευση σφαλμάτων, τη συντήρηση και την προσθήκη νέων λειτουργιών. Το πρόγραμμα οδήγησης Binder IPC στο Rust έχει οριστεί ως το κύριο πρόγραμμα οδήγησης και δεν παρουσιάζεται πλέον ως πειραματική ανάπτυξη.
  • Κυκλοφόρησε το Arti 2.7.0, μια υλοποίηση του κιτ εργαλείων Tor σε Rust. Μόλις η βάση κώδικα του Arti φτάσει σε ένα επίπεδο ικανό να αντικαταστήσει πλήρως την υλοποίηση C, οι προγραμματιστές του Tor σκοπεύουν να καταστήσουν το Arti την κύρια υλοποίηση Tor και να καταργήσουν σταδιακά τη συντήρηση της υλοποίησης C. Η νέα έκδοση περιλαμβάνει ανάπτυξη λειτουργιών για αναμεταδότες και διακομιστές Λειτουργικότητα Αρχής Καταλόγου (DA) που σχετίζεται με την ανάλυση εγγράφων, την υποστήριξη κατοπτρισμού διακομιστή καταλόγου και την επεξεργασία κίνησης DNS. Έχει προστεθεί μια υλοποίηση RPC για αλλαγές και ελέγχους διαμόρφωσης. Έχουν διορθωθεί αρκετές ευπάθειες—οι διαχειριστές υπηρεσιών onion καλούνται να ενημερώσουν επειγόντως τα συστήματά τους.

Πηγή: opennet.ru

Αγοράστε αξιόπιστη φιλοξενία για ιστότοπους με προστασία DDoS, διακομιστές VPS VDS 🔥 Αγοράστε αξιόπιστη φιλοξενία ιστοσελίδων με προστασία DDoS, διακομιστές VPS VDS | ProHoster