Κυκλοφορία της γλώσσας προγραμματισμού Rust 2021 (1.56)

Δημοσιεύτηκε η κυκλοφορία της γλώσσας προγραμματισμού συστήματος Rust 1.56, που ιδρύθηκε από το έργο Mozilla, αλλά τώρα αναπτύχθηκε υπό την αιγίδα του ανεξάρτητου μη κερδοσκοπικού οργανισμού Rust Foundation. Εκτός από τον αριθμό της κανονικής έκδοσης, η έκδοση ονομάζεται επίσης Rust 2021 και σηματοδοτεί τη σταθεροποίηση των αλλαγών που προτάθηκαν τα τελευταία τρία χρόνια. Το Rust 2021 θα χρησιμεύσει επίσης ως βάση για την αύξηση της λειτουργικότητας τα επόμενα τρία χρόνια, παρόμοια με το πώς η κυκλοφορία του Rust 2018 έγινε η βάση για την ανάπτυξη της γλώσσας τα τελευταία τρία χρόνια.

Για να διατηρήσουν τη συμβατότητα, οι προγραμματιστές μπορούν να χρησιμοποιούν τις ετικέτες "2015", "2018" και "2021" στα προγράμματά τους, επιτρέποντας στα προγράμματα να συνδέονται με τμήματα κατάστασης γλώσσας που αντιστοιχούν στις επιλεγμένες εκδόσεις του Rust. Οι εκδόσεις εισήχθησαν για διαχωρισμό μη συμβατών αλλαγών και διαμορφώνονται στα μεταδεδομένα των πακέτων φορτίου μέσω του πεδίου "έκδοση" στην ενότητα "[πακέτο]". Για παράδειγμα, η έκδοση "2018" περιλαμβάνει τη λειτουργικότητα που έχει σταθεροποιηθεί από το τέλος του 2018 και καλύπτει επίσης όλες τις περαιτέρω αλλαγές που δεν διαταράσσουν τη συμβατότητα. Η έκδοση του 2021 περιλαμβάνει επιπλέον χαρακτηριστικά διαλειτουργικότητας που προτείνονται στην τρέχουσα έκδοση 1.56 και έχουν εγκριθεί για μελλοντική εφαρμογή. Εκτός από την ίδια τη γλώσσα, οι συντάκτες λαμβάνουν επίσης υπόψη την κατάσταση των εργαλείων και της τεκμηρίωσης.

Σημαντικές ασυμβατότητες που καταγράφηκαν στο Rust 2021:

  • Ξεχωριστή λήψη σε κλεισίματα - Τα κλεισίματα μπορούν πλέον να καταγράφουν ονόματα μεμονωμένων πεδίων αντί για ολόκληρο το αναγνωριστικό. Για παράδειγμα, "|| Το τσεκούρι + 1" θα γράψει μόνο το "ax" αντί για το "a".
  • Το χαρακτηριστικό IntoIterator για πίνακες: array.into_iter() σάς επιτρέπει να επαναλαμβάνετε τα στοιχεία του πίνακα κατά τιμές και όχι με αναφορές.
  • Η επεξεργασία των παραστάσεων "|" έχει αλλάξει σε macro_rules (Boolean OR) σε μοτίβα - Ο προσδιοριστής ":pat" στις αντιστοιχίσεις σέβεται πλέον το "A | ΣΙ".
  • Ο διαχειριστής πακέτων φορτίου περιλαμβάνει από προεπιλογή τη δεύτερη έκδοση του προγράμματος ανάλυσης χαρακτηριστικών, η υποστήριξη για την οποία εμφανίστηκε στο Rust 1.51.
  • Τα χαρακτηριστικά TryFrom, TryInto και FromIterator έχουν προστεθεί στην τυπική ενότητα βιβλιοθήκης του πρελούδιου.
  • Οι μακροεντολές πανικού!(..) και επιβεβαίωσης!(expr, ..) χρησιμοποιούν πλέον πάντα format_args!(..) για να μορφοποιήσουν συμβολοσειρές, παρόμοια με το println!().
  • Οι εκφράσεις ident#, ident»... και ident'...' δεσμεύονται στη σύνταξη της γλώσσας.
  • Μετακινήθηκαν bare_trait_objects και ellipsis_inclusive_range_patterns προειδοποιήσεις σε σφάλματα.

Νέο στο Rust 1.56:

  • Στο Cargo.toml, στην ενότητα "[package]", έχει προστεθεί το πεδίο rust-version, μέσω του οποίου μπορείτε να προσδιορίσετε την ελάχιστη υποστηριζόμενη έκδοση του Rust για το πακέτο κλουβιών. Εάν η τρέχουσα έκδοση δεν ταιριάζει με την καθορισμένη παράμετρο, το Cargo θα σταματήσει να λειτουργεί με ένα μήνυμα σφάλματος.
  • Κατά την αντιστοίχιση μοτίβων χρησιμοποιώντας εκφράσεις "binding @ pattern", παρέχεται υποστήριξη για τον καθορισμό πρόσθετων δεσμεύσεων (για παράδειγμα, "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • Ένα νέο τμήμα του API έχει μετακινηθεί στην κατηγορία των σταθερών, συμπεριλαμβανομένων των μεθόδων και των εφαρμογών των χαρακτηριστικών έχουν σταθεροποιηθεί:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • πυρήνας::πανικός::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • Συμβολοσειρά::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • Το χαρακτηριστικό "const", το οποίο καθορίζει τη δυνατότητα χρήσης σε οποιοδήποτε πλαίσιο αντί για σταθερές, χρησιμοποιείται στις συναρτήσεις
    • std::mem::transmute
    • [T]::πρώτα
    • [T]::split_first
    • [T]::τελευταίο
    • [T]::split_last
  • Ο μεταγλωττιστής έχει αλλάξει σε χρήση LLVM έκδοσης 13.
  • Ένα δεύτερο επίπεδο υποστήριξης έχει εφαρμοστεί για την πλατφόρμα aarch64-apple-ios-sim και ένα τρίτο επίπεδο για τις πλατφόρμες powerpc-unknown-freebsd και riscv32imc-esp-espidf. Το τρίτο επίπεδο περιλαμβάνει βασική υποστήριξη, αλλά χωρίς αυτοματοποιημένες δοκιμές, δημοσίευση επίσημων εκδόσεων ή έλεγχο του αν μπορεί να κατασκευαστεί ο κώδικας.

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

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

Πηγή: opennet.ru

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