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

Που δημοσιεύθηκε έκδοση γλώσσας προγραμματισμού συστήματος Σκουριά 1.36, που ιδρύθηκε από το έργο Mozilla. Η γλώσσα εστιάζει στην ασφάλεια της μνήμης, παρέχει αυτόματη διαχείριση της μνήμης και παρέχει ένα μέσο για την επίτευξη υψηλού παραλληλισμού εργασιών χωρίς τη χρήση απορριμμάτων ή χρόνου εκτέλεσης.

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

Ο κύριος καινοτομίες:

  • Το χαρακτηριστικό σταθεροποιήθηκε Μελλοντικός, η οποία αντιπροσωπεύει μια τιμή της οποίας η αξιολόγηση ενδέχεται να μην έχει ολοκληρωθεί ακόμη κατά τη χρήση μπλοκ async / .wait. Οι ασύγχρονες τιμές που ορίζονται χρησιμοποιώντας το Future καθιστούν δυνατή τη συνέχιση της εκτέλεσης χρήσιμης εργασίας στο νήμα, ενώ ταυτόχρονα περιμένουν την ολοκλήρωση των υπολογισμών μιας συγκεκριμένης τιμής.
  • Η βιβλιοθήκη σταθεροποιήθηκε κατανέμω, το οποίο παρέχει έξυπνους δείκτες και συλλογές για τη διαχείριση τιμών που εκχωρούνται από τη μνήμη. Η εκχώρηση μνήμης στο std χρησιμοποιεί πλέον τον τύπο Ενα πράγμα, τα οποία επανεξάγονται από το alloc. Η ξεχωριστή χρήση του alloc έχει νόημα σε εφαρμογές που δεν συνδέονται με το std ("#![no_std]"), καθώς και σε βιβλιοθήκες που έχουν σχεδιαστεί για χρήση σε παρόμοια προγράμματα χωρίς std.
  • Για να παρακάμψετε τους ελέγχους για σωστή αρχικοποίηση τιμών προτείνεται ενδιάμεσου τύπου Ίσως Μονάδα, η οποία μπορεί να χρησιμοποιηθεί αντί της συνάρτησης mem::unitialized ως ασφαλέστερη εναλλακτική. Η συνάρτηση mem::unitialized είναι βολική για τη γρήγορη δημιουργία πινάκων, αλλά παραπλανά τον μεταγλωττιστή επειδή φαίνεται να έχει αρχικοποιηθεί, αλλά στην πραγματικότητα η τιμή παραμένει μη αρχικοποιημένη. Το MaybeUninit σάς επιτρέπει να υποδείξετε ρητά στον μεταγλωττιστή ότι η τιμή δεν έχει αρχικοποιηθεί, για να λάβετε υπόψη την πιθανή απροσδιόριστη συμπεριφορά που σχετίζεται με αυτό, καθώς και να οργανώσετε ελέγχους σε προγράμματα μέσω "maybe_t:" και αρχικοποίησης βήμα προς βήμα, σημειώνοντας την ολοκλήρωσή της χρησιμοποιώντας την κλήση ".assume_init()". Με την εμφάνιση του MaybeUninit, η συνάρτηση mem::unitialized έχει καταργηθεί και δεν συνιστάται για χρήση.
  • Η τεχνική NLL (Non-Lexical Lifetimes), η οποία επέκτεινε το σύστημα για την καταγραφή της διάρκειας ζωής των δανεικών μεταβλητών, έχει σταθεροποιηθεί για τη γλώσσα Rust 2015 (αρχικά, το NLL υποστηρίζονταν μόνο από το Rust 2018). Αντί να δεσμεύει χρόνους ζωής σε λεξιλογικό επίπεδο, το NLL το κάνει στο επίπεδο του συνόλου των δεικτών στο γράφημα ροής εκτέλεσης. Αυτή η προσέγγιση σάς επιτρέπει να αυξήσετε την ποιότητα του ελέγχου του δανεισμού των μεταβλητών (δανεισμός ελεγκτή) και να επιτρέψετε την εκτέλεση ορισμένων τύπων σωστού κώδικα, η χρήση των οποίων προηγουμένως οδήγησε σε σφάλμα. Η νέα συμπεριφορά κάνει επίσης πολύ πιο εύκολο τον εντοπισμό σφαλμάτων.
  • Περιλαμβάνεται νέα εφαρμογή συσχετιστικών πινάκων HashMap, με βάση την εφαρμογή της δομής Ελβετικό τραπέζι (αυτόματη φόρτωση hashbrown::HashMap, εκτός εάν αναφέρεται ρητά διαφορετικά, όπως το std::HashMap, το οποίο βασίζεται στο SipHash 1-3). Η διεπαφή λογισμικού παραμένει η ίδια και οι διαφορές που παρατηρούνται στον προγραμματιστή συνοψίζονται στην αύξηση της απόδοσης και στη μειωμένη κατανάλωση μνήμης.
  • Στο φορτίο διαχείρισης πακέτων προστέθηκε την επιλογή «--offline», η οποία επιτρέπει τη λειτουργία χωρίς πρόσβαση στο δίκτυο, στην οποία χρησιμοποιούνται μόνο πακέτα που είναι αποθηκευμένα στην κρυφή μνήμη στο τοπικό σύστημα κατά την εγκατάσταση εξαρτήσεων. Εάν η εξάρτηση δεν βρίσκεται στην τοπική κρυφή μνήμη, θα εμφανιστεί ένα σφάλμα. Για να προφορτώσετε εξαρτήσεις στην τοπική κρυφή μνήμη πριν βγείτε εκτός σύνδεσης, μπορείτε να χρησιμοποιήσετε την εντολή "ανάκτηση φορτίου".
  • Εφαρμόστηκε η δυνατότητα κλήσης της μακροεντολής "dbg!" αναφέροντας πολλά επιχειρήματα.
  • Το χαρακτηριστικό "const", το οποίο καθορίζει τη δυνατότητα χρήσης σε οποιοδήποτε πλαίσιο αντί για σταθερές, χρησιμοποιείται για μεθόδους
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::κρεμαστά και
    NonNull::cast;

  • Ένα νέο τμήμα API μεταφέρθηκε στη σταθερή κατηγορία, συμπεριλαμβανομένων μεθόδων που έχουν σταθεροποιηθεί
    task::Waker, task::δημοσκόπηση,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::copied,
    BorrowMut (για συμβολοσειρές) και str::as_mut_ptr.

Πηγή: opennet.ru

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