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

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

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

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

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

  • Είναι δυνατό να ορίσετε τους δικούς σας κωδικούς επιστροφής από την κύρια λειτουργία. Αρχικά, η κύρια συνάρτηση του Rust μπορούσε να επιστρέψει μόνο τον τύπο "()" (μονάδα), ο οποίος πάντα υποδείκνυε μια επιτυχημένη κατάσταση εξόδου, εκτός εάν ο προγραμματιστής καλούσε ρητά τη συνάρτηση "process::exit(code)". Στο Rust 1.26, χρησιμοποιώντας το ασταθές χαρακτηριστικό τερματισμού στην κύρια συνάρτηση, ήταν δυνατή η επιστροφή των τιμών "Ok" και "Err", που αντιστοιχούν στους κωδικούς EXIT_SUCCESS και EXIT_FAILURE στα προγράμματα C. Στο Rust 1.61, το χαρακτηριστικό Termination έχει γίνει σταθερό και ένας ξεχωριστός τύπος ExitCode έχει προταθεί για να αντιπροσωπεύει έναν συγκεκριμένο κωδικό επιστροφής, ο οποίος αφαιρεί τους τύπους επιστροφής για συγκεκριμένη πλατφόρμα παρέχοντας και τις δύο προκαθορισμένες σταθερές SUCCESS και FAILURE και τη μέθοδο From για να επιστρέψετε έναν προσαρμοσμένο κωδικό επιστροφής. χρήση std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } Exit Code::SUCCESS }
  • Έχουν σταθεροποιηθεί πρόσθετες δυνατότητες συναρτήσεων που ορίζονται χρησιμοποιώντας την έκφραση "const fn", οι οποίες μπορούν να ονομαστούν όχι μόνο ως κανονικές συναρτήσεις, αλλά και να χρησιμοποιηθούν σε οποιοδήποτε πλαίσιο αντί για σταθερές. Αυτές οι συναρτήσεις υπολογίζονται κατά το χρόνο μεταγλώττισης, όχι κατά το χρόνο εκτέλεσης, επομένως υπόκεινται σε ορισμένους περιορισμούς, όπως η δυνατότητα ανάγνωσης μόνο από σταθερές. Στη νέα έκδοση, οι βασικές λειτουργίες με δείκτες συνάρτησης επιτρέπονται μέσα στις συναρτήσεις const (επιτρέπεται η δημιουργία, η μετάδοση και η μετάδοση δεικτών, αλλά όχι η κλήση μιας συνάρτησης με δείκτη). όρια χαρακτηριστικών για γενικές παραμέτρους συναρτήσεων const όπως T: Copy; Δυναμικά αποσπώμενα χαρακτηριστικά (dyn Trait). impl Τύποι χαρακτηριστικών για ορίσματα συναρτήσεων και τιμές επιστροφής.
  • Η ροή χειρίζεται τα Stdin, Stdout και Stderr στο std::io έχουν πλέον στατική διάρκεια ζωής ("static") όταν είναι κλειδωμένα, επιτρέποντας δομές όπως "let out = std::io::stdout().lock();" με το να πάρεις μια λαβή και να βάλεις μια κλειδαριά σε μια έκφραση.
  • Ένα νέο τμήμα του API έχει μετακινηθεί στην κατηγορία των σταθερών, συμπεριλαμβανομένων των μεθόδων και των εφαρμογών των χαρακτηριστικών έχουν σταθεροποιηθεί:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Γράψτε για δρομέα<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::διαδικασία::Τερματισμός
    • std::thread::JoinHandle::is_finished
  • Το χαρακτηριστικό "const", το οποίο καθορίζει τη δυνατότητα χρήσης του σε οποιοδήποτε πλαίσιο αντί για σταθερές, χρησιμοποιείται στις συναρτήσεις:
    • <*const T>::offset και <*mut T>::offset
    • <*const T>::wrapping_offset και <*mut T>::wrapping_offset
    • <*const T>::add και <*mut T>::add
    • <*const T>::sub και <*mut T>::sub
    • <*const T>::wrapping_add και <*mut T>::wrapping_add
    • <*const T>::wrapping_sub και <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Επιπλέον, μπορείτε να σημειώσετε το άρθρο "Rust: A Critical Retrospective" με μια περίληψη των εντυπώσεων της γλώσσας Rust μετά την εγγραφή 100 χιλιάδων γραμμών κώδικα σε αυτήν κατά την ανάπτυξη του λειτουργικού συστήματος μικροπυρήνα Xous που χρησιμοποιείται στο υλικολογισμικό. Στα μειονεκτήματα περιλαμβάνονται η δυσνόητη σύνταξη, η ατελή και συνεχής ανάπτυξη της γλώσσας, η έλλειψη επαναλήψεων εκδόσεων, τυπικά προβλήματα με την εμπιστοσύνη εξάρτησης στο Crates.io και η ανάγκη διατήρησης μιας συγκεκριμένης πειθαρχίας για τη σύνταξη ασφαλούς κώδικα. Χαρακτηριστικά που ξεπέρασαν τις προσδοκίες περιλαμβάνουν εργαλεία για την ανακατασκευή κώδικα και την επανεπεξεργασία «hacks» που προστέθηκαν κατά την ταχεία δημιουργία πρωτοτύπων.

Πηγή: opennet.ru

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