Κυκλοφορία γλώσσας προγραμματισμού Rust 1.65

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

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

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

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

  • Προστέθηκε υποστήριξη για γενικούς συσχετισμένους τύπους (GAT, Generic Associated Types), οι οποίοι καθιστούν δυνατή τη δημιουργία ψευδωνύμων τύπου που σχετίζονται με άλλο τύπο και σας επιτρέπουν να συσχετίσετε κατασκευαστές τύπων με χαρακτηριστικά. χαρακτηριστικό Foo { type Bar<'x>; }
  • Η έκφραση "let ... else" έχει εφαρμοστεί, επιτρέποντάς σας να ελέγξετε τη συνθήκη αντιστοίχισης προτύπου απευθείας μέσα στην έκφραση "let" και να εκτελέσετε αυθαίρετο κώδικα εάν το μοτίβο δεν ταιριάζει. ας Ok(count) = u64::from_str(count_str) else { πανικός!("Δεν είναι δυνατή η ανάλυση του ακέραιου αριθμού: '{count_str}'"); };
  • Επιτρέψτε τη χρήση μιας δήλωσης διακοπής για πρόωρη έξοδο από τα ονόματα μπλοκ, χρησιμοποιώντας το όνομα του μπλοκ (ετικέτα) για να προσδιορίσετε το μπλοκ που πρόκειται να τερματιστεί. let result = 'block: {do_thing(); if condition_not_met() { break 'block 1; } do_next_thing(); if condition_not_met() { break 'block 2; } do_last_thing(); 3 };
  • Για το Linux, έχει προστεθεί η δυνατότητα χωριστής αποθήκευσης πληροφοριών εντοπισμού σφαλμάτων (split-debuginfo), που προηγουμένως ήταν διαθέσιμη μόνο για την πλατφόρμα macOS. Όταν καθορίζετε την επιλογή "-Csplit-debuginfo=unpacked", τα δεδομένα εντοπισμού σφαλμάτων σε μορφή DWARF θα αποθηκευτούν σε πολλά ξεχωριστά αρχεία αντικειμένων με επέκταση ".dwo". Ο καθορισμός του "-Csplit-debuginfo=packed" θα δημιουργήσει ένα ενιαίο πακέτο σε μορφή ".dwp" που περιλαμβάνει όλα τα δεδομένα εντοπισμού σφαλμάτων για το έργο. Για να ενσωματώσετε πληροφορίες εντοπισμού σφαλμάτων απευθείας στην ενότητα .debug_* των αντικειμένων ELF, μπορείτε να χρησιμοποιήσετε την επιλογή "-Csplit-debuginfo=off".
  • Ένα νέο τμήμα του API έχει μετακινηθεί στην κατηγορία των σταθερών, συμπεριλαμβανομένων των μεθόδων και των εφαρμογών των χαρακτηριστικών έχουν σταθεροποιηθεί:
    • std::backtrace::Backtrace
    • Δεμένο::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • Το χαρακτηριστικό "const", το οποίο καθορίζει τη δυνατότητα χρήσης του σε οποιοδήποτε πλαίσιο αντί για σταθερές, χρησιμοποιείται στις συναρτήσεις <*const T&>::offset_from και <*mut T>::offset_from
  • Ως μέρος του τελικού σταδίου μεταφοράς της υλοποίησης του πρωτοκόλλου LSP (Language Server Protocol) στον αναλυτή σκουριάς, η παρωχημένη εφαρμογή του Rust Language Server (RLS) αντικαταστάθηκε με έναν διακομιστή stub που εκδίδει μια προειδοποίηση με πρόταση για μετάβαση σε χρησιμοποιώντας αναλυτή σκουριάς.
  • Κατά τη μεταγλώττιση, είναι ενεργοποιημένη η υποστήριξη για την ενσωματωμένη ανάπτυξη του ενδιάμεσου κώδικα MIR, η οποία επιταχύνει τη μεταγλώττιση τυπικών πακέτων κλουβιών κατά 3-10%.
  • Για να επιταχύνει τις προγραμματισμένες εκδόσεις, ο διαχειριστής πακέτων Cargo παρέχει ταξινόμηση των εργασιών που αναμένουν εκτέλεση στην ουρά.

Επιπλέον, μπορείτε να σημειώσετε τη συνέντευξη σχετικά με τη χρήση της γλώσσας Rust στη Volvo για την ανάπτυξη εξαρτημάτων συστημάτων πληροφοριών αυτοκινήτου. Δεν υπάρχουν σχέδια για επανεγγραφή υπάρχοντος και δοκιμασμένου κώδικα στο Rust, αλλά για νέο κώδικα, το Rust είναι μία από τις προτιμώμενες επιλογές για τη βελτίωση της ποιότητας με χαμηλότερο κόστος. Ομάδες εργασίας που σχετίζονται με τη χρήση της γλώσσας Rust έχουν επίσης δημιουργηθεί στις αυτοκινητοβιομηχανίες AUTOSAR (AUTomotive Open System ARchitecture) και SAE (Society of Automotive Engineers).

Επιπλέον, ο David Kleidermacher, αντιπρόεδρος μηχανικής της Google, μίλησε για τη μετάφραση του κώδικα που χρησιμοποιείται στην πλατφόρμα Android για τη διαχείριση κλειδιών κρυπτογράφησης στο Rust, καθώς και για τη χρήση του Rust στην υλοποίηση του πρωτοκόλλου DNS μέσω HTTPS στη στοίβα για τσιπ UWB (Ultra-Wideband) και στο πλαίσιο εικονικοποίησης (Android Virtualization Framework) που σχετίζεται με το τσιπ Tensor G2. Νέες στοίβες για Bluetooth και Wi-Fi, που έχουν ξαναγραφτεί στο Rust, αναπτύσσονται επίσης για Android. Η γενική στρατηγική είναι η σταδιακή ενίσχυση της ασφάλειας, πρώτα με τη μετατροπή των πιο ευάλωτων και ζωτικής σημασίας στοιχείων λογισμικού σε Rust και στη συνέχεια με επέκταση σε άλλα σχετικά υποσυστήματα. Πέρυσι, η γλώσσα Rust συμπεριλήφθηκε στη λίστα των γλωσσών που επιτρέπονται για την ανάπτυξη της πλατφόρμας Android.

Πηγή: opennet.ru

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