Σκουριά 1.96.0

Η έκδοση δημοσιεύτηκε Σκουριά 1.96.0 — η τελευταία σταθερή έκδοση της γλώσσας προγραμματισμού Rust. Η ενημέρωση έχει κυκλοφορήσει. 28 Μαΐου 2026 χρόνιαΜπορεί να εγκατασταθεί χρησιμοποιώντας την τυπική εντολή rustup update stable. Οι κύριες αλλαγές περιλαμβάνουν νέους τύπους εύρους στο core::range, σταθεροποίηση μακροεντολών αντιστοίχισης μοτίβων, αυστηροποίηση της συμπεριφοράς δημιουργίας του WebAssembly και διορθώσεις για δύο ευπάθειες στο Cargo.

Σημαντικές αλλαγές

  • Νέοι τύποι εύρους core::range::Range*.
    Νέοι τύποι εύρους έχουν σταθεροποιηθεί στην τυπική βιβλιοθήκη: core::range::Range, RangeFrom, RangeInclusive και οι σχετικοί επαναλήπτες. Σε αντίθεση με τους παλιούς τύπους από το core::ops, οι νέες περιοχές δεν υλοποιούν απευθείας τον Επαναλήπτη, αλλά μετατρέπονται σε επαναλήπτη μέσω του IntoIterator. Αυτό επιτρέπει σε αυτές τις περιοχές να είναι αντιγράψιμες, κάτι που είναι βολικό, για παράδειγμα, κατά την αποθήκευση μιας περιοχής ως πεδίο δομής. Η σύνταξη όπως η 0..1 δημιουργεί αυτήν τη στιγμή τους παλιούς τύπους εύρους, αλλά έχει προγραμματιστεί η μετεγκατάστασή της στους νέους τύπους σε μια μελλοντική έκδοση της γλώσσας.

  • Προστέθηκαν οι τιμές assert_matches! και debug_assert_matches!.
    Οι νέες μακροεντολές σάς επιτρέπουν να ελέγξετε ότι μια τιμή ταιριάζει με ένα δεδομένο μοτίβο. Αυτό είναι παρόμοιο σε ιδέα με το assert!(matches!(…)), αλλά σε περίπτωση σφάλματος, εκτυπώνεται μια αναπαράσταση εντοπισμού σφαλμάτων της τιμής, απλοποιώντας τη διαγνωστική. Αυτές οι μακροεντολές δεν προστέθηκαν στο Prelude για να αποφευχθούν διενέξεις με δημοφιλή crates τρίτων, επομένως πρέπει να εισάγονται ρητά από τον πυρήνα ή το std.

  • Άλλαξε η συμπεριφορά των στόχων WebAssembly.
    Το Rust δεν μεταδίδει πλέον το --allow-undefined στον σύνδεσμο για τις δομές WebAssembly. Τα μη καθορισμένα σύμβολα αντιμετωπίζονται πλέον ως σφάλματα κατά τη σύνδεση, αντί να μετατρέπονται αυτόματα σε εισαγωγές από τη λειτουργική μονάδα "env". Αυτό θα πρέπει να εντοπίζει σφάλματα δόμησης και μη έγκυρα ονόματα συμβόλων νωρίτερα. Η παλιά συμπεριφορά μπορεί να επαναφερθεί, εάν χρειάζεται, χρησιμοποιώντας RUSTFLAGS=-Clink-arg=--allow-undefined ή καθορίζοντας ρητά την εισαγόμενη λειτουργική μονάδα wasm χρησιμοποιώντας #[link(wasm_import_module = "env")].

  • Το φορτίο έχει λάβει διορθώσεις ασφαλείας.
    Η έκδοση Rust 1.96.0 διορθώνει δύο ευπάθειες που επηρεάζουν τους χρήστες μητρώων τρίτων. CVE-2026-5223 Σχετικά με τον χειρισμό των συμβολικών συνδέσμων (symlinks) μέσα σε tarballs crate: ένα κακόβουλο πακέτο από ένα μητρώο τρίτου μέρους θα μπορούσε να αντικαταστήσει την προσωρινή μνήμη ενός άλλου πακέτου από το ίδιο μητρώο. Ξεκινώντας με την έκδοση Rust 1.96.0, το Cargo απορρίπτει τα αρχεία crate που περιέχουν συμβολικούς συνδέσμους. CVE-2026-5222 Αυτό το ζήτημα σχετίζεται με την ομαλοποίηση URL στο αραιό μητρώο και, υπό σπάνιες συνθήκες, θα μπορούσε να οδηγήσει στην αποστολή ενός διακριτικού Cargo σε ένα κακόβουλο μητρώο. Σύμφωνα με την ομάδα Rust, οι χρήστες του crates.io δεν επηρεάζονται από αυτά τα ζητήματα.

  • Αλλαγές στη γλώσσα.
    Η έκδοση περιλαμβάνει: Αρκετές μικρές διορθώσεις και βελτιώσεις: Επιτράπηκε η μεταβίβαση μεταμεταβλητών expr μακροεντολών σε cfg, διορθώθηκε η μετατροπή τύπου never-type σε εκφράσεις πλειάδων, διορθώθηκαν σπάνιες περιπτώσεις λανθασμένων υποδείξεων εξαγωγής τύπου για ορίσματα συνάρτησης, προστέθηκε υποστήριξη για καταχωρητές διανυσμάτων s390x στην ενσωματωμένη συμβολή και επιτράπηκαν εκ νέου οι σταθερές ManuallyDrop ως πρότυπα—αυτό διορθώνει μια παλινδρόμηση που εισήχθη στο Rust 1.94.0.

  • Αλλαγές στον μεταγλωττιστή και τις πλατφόρμες.
    Για LinuxΗ υποστήριξη χαλάρωσης συνδέσμων έχει ενεργοποιηθεί για τους στόχους LoongArch—μια βελτιστοποίηση συνδέσμων που απλοποιεί ορισμένες μεταβάσεις και κλήσεις μετά την ανάπτυξη κώδικα. Για το riscv64gc-unknown-fuchsia, η βασική διαμόρφωση έχει ενημερωθεί στο προφίλ RVA22 με υποστήριξη για επεκτάσεις διανυσμάτων.

  • Τυπικές ενημερώσεις βιβλιοθήκης.
    Έχει προστεθεί υποστήριξη για επανάληψη σε μη μηδενικά εύρη ακεραίων. Έχει επίσης διορθωθεί η αργή διαχείριση των διευθύνσεων κεντρικού υπολογιστή στο SGX μέσω του ToSocketAddr και ο ορισμός της "αναγνώσιμης/εγγράψιμης" μνήμης έχει διευκρινιστεί στην τεκμηρίωση και στις εσωτερικές συμβάσεις: ο μηδενικός δείκτης έχει αφαιρεθεί από τον γενικό ορισμό και οι εξαιρέσεις καθορίζονται πλέον ξεχωριστά για συγκεκριμένες μεθόδους.

  • Σταθεροποιημένα API.
    Μεταξύ των σταθεροποιημένων διεπαφών είναι οι assert_matches!, debug_assert_matches!, υλοποιήσεις του From για το AssertUnwindSafe , LazyCell και LazyLock , καθώς και νέους τύπους εύρους και επαναλήπτες από το core::range, συμπεριλαμβανομένων των Range, RangeFrom, RangeToInclusive και των επαναληπτών τους.

  • Φορτίο: Αλλαγές στις εξαρτήσεις και την τεκμηρίωση.
    Μια εξάρτηση μπορεί πλέον να καθορίσει τόσο ένα αποθετήριο Git όσο και ένα εναλλακτικό μητρώο: η έκδοση Git θα χρησιμοποιείται τοπικά και η έκδοση μητρώου θα χρησιμοποιείται κατά τη δημοσίευση, παρόμοια με τη συμπεριφορά με το crates.io. Έχει επίσης προστεθεί υποστήριξη για το target.'cfg(..)'.rustdocflags στη διαμόρφωση Cargo.

  • Το Rustdoc χειρίζεται πλέον την τεκμηρίωση με μεγαλύτερη ακρίβεια.
    Οι παρωχημένες σημειώσεις API αποδίδονται πλέον ως κανονική τεκμηρίωση, χωρίς την προηγούμενη ειδική επεξεργασία μέσω white-space: pre-wrap. Επιπλέον, το rustdoc δεν εμφανίζει πλέον το missing_doc_code_examples για στοιχεία μέσα στο impl, και οι μέθοδοι και οι σχετικές συναρτήσεις διαχωρίζονται πλέον στην πλαϊνή γραμμή τεκμηρίωσης.

  • Πιθανές ασυμβατότητες.
    Η έκδοση περιέχει αρκετές αλλαγές που ενδέχεται να εμφανιστούν σε μη τυπικό κώδικα: η διάταξη ορισμένων απαριθμών #[repr(Int)] έχει διορθωθεί σε ακραίες περιπτώσεις και ορισμένες άχρηστες μετατροπές μεγέθους unsize στο Pin έχουν απενεργοποιηθεί. , Οι κατασκευές WebAssembly παρουσιάζουν πλέον σφάλμα σε μη καθορισμένα σύμβολα, το κατά λάθος σταθεροποιημένο χαρακτηριστικό #![reexport_test_harness_main] έχει απενεργοποιηθεί ξανά ως feature gated, η επιλογή -Csoft-float έχει αφαιρεθεί και η ελάχιστη έκδοση εξωτερικού LLVM έχει αυξηθεί σε 21. Για το AVR, ο τύπος c_double έχει αλλάξει σε f32, καθώς τα C double είναι 32-bit από προεπιλογή σε αυτούς τους προορισμούς.

Πηγή: linux.org.ru

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