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

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

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

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

  • Προστέθηκε η δυνατότητα επισήμανσης δομών (δομή) και απαρίθμησης (enum με μπλοκ παραλλαγής) χρησιμοποιώντας το χαρακτηριστικό "#[μη_εξαντλητική]", οι οποίες позволяет στο μέλλον, προσθέστε νέα πεδία και επιλογές σε δηλωμένες δομές και απαριθμήσεις. Για παράδειγμα, οι προγραμματιστές λειτουργικών μονάδων που έχουν δομές με δημόσια δηλωμένα πεδία μπορούν να χρησιμοποιήσουν το "#[non_exhaustive]" για να επισημάνουν δομές στις οποίες ενδέχεται να προστεθούν νέα πεδία στο μέλλον. Μέχρι τώρα, σε αυτήν την κατάσταση, ο προγραμματιστής αναγκαζόταν να επιλέξει μεταξύ της δήλωσης πεδίων ιδιωτικά και της δέσμευσης σε μια αμετάβλητη λίστα πεδίων. Το νέο χαρακτηριστικό καταργεί αυτόν τον περιορισμό και σας επιτρέπει να προσθέσετε νέα πεδία στο μέλλον χωρίς τον κίνδυνο να σπάσετε προηγουμένως μεταγλωττισμένο εξωτερικό κώδικα. Στα πακέτα κλουβιών, κατά την αντιστοίχιση επιλογών στην ενότητα "αντιστοιχία", απαιτείται ρητός ορισμός της μάσκας "_ => {...}", που καλύπτει πιθανά μελλοντικά πεδία, διαφορετικά θα εμφανιστεί σφάλμα κατά την προσθήκη νέων πεδίων.
  • Προστέθηκε τη δυνατότητα κλήσης της διαδικαστικής μακροεντολής mac!() σε περιβάλλον τύπου. Για παράδειγμα, μπορείτε τώρα να γράψετε "type Foo = expand_to_type!(bar);" εάν το "expand_to_type" είναι μια διαδικαστική μακροεντολή.
  • Σε μπλοκ "extern { ... }". προστέθηκε τη δυνατότητα χρήσης διαδικαστικών και χαρακτηριστικών μακροεντολών, συμπεριλαμβανομένων των μακροεντολών "bang!()", για παράδειγμα:

    macro_rules! make_item { ($name:ident) => { fn $name(); } }

    εξωτερικό {
    make_item!(alpha);
    make_item!(beta);
    }

    εξωτερικό "C" {
    #[my_identity_macro] fn foo();
    }

  • Σε μακροεντολές εφαρμόστηκε δυνατότητα δημιουργίας στοιχείων "macro_rules!". Δημιουργία "macro_rules!" δυνατή τόσο σε μακροεντολές που μοιάζουν με συναρτήσεις ("mac!()") όσο και σε μακροεντολές με τη μορφή χαρακτηριστικών ("#[mac]").
  • Στο στοιχείο αντιστοίχισης $m:meta προστέθηκε υποστήριξη για αυθαίρετες τιμές απαρίθμησης διακριτικών ("[TOKEN_STREAM]", "{TOKEN_STREAM}" και "(TOKEN_STREAM)"), για παράδειγμα:

    macro_rules! accept_meta { ($m:meta) => {} }
    accept_meta!( my::path );
    accept_meta!( my::path = "lit" );
    accept_meta!( my::path ( a b c ) );
    accept_meta!( my::path [ a b c ] );
    accept_meta!( my::path { a b c } );

  • Στη λειτουργία Rust 2015, η έξοδος σφάλματος είναι ενεργοποιημένη για προβλήματα που εντοπίζονται κατά τον έλεγχο του δανεισμού μεταβλητών (έλεγχος δανεισμού) χρησιμοποιώντας την τεχνική NLL (Non-Lexical Lifetimes). Προηγουμένως, οι προειδοποιήσεις αντικαταστάθηκαν με σφάλματα κατά την εκτέλεση σε λειτουργία Rust 2018.
    Μετά την επέκταση της αλλαγής στη λειτουργία Rust 2015, οι προγραμματιστές μπόρεσαν τελικά να απαλλαγείτε από από το παλιό δάνειο πούλι.

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

  • Το χαρακτηριστικό "const", το οποίο καθορίζει τη δυνατότητα χρήσης του σε οποιοδήποτε πλαίσιο αντί για σταθερές, χρησιμοποιείται για τη συνάρτηση is_power_of_two (για ακέραιους χωρίς υπογραφή).
  • Ένα νέο τμήμα του API έχει μετακινηθεί στη σταθερή κατηγορία, συμπεριλαμβανομένης της μακροεντολής todo!() και του slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, οι μέθοδοι έχουν σταθεροποιηθεί.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, f32}::from_be_bytes, {f64,f32}::from_le_bytes και {f64,f32}::from_ne_bytes.

  • Στο φορτίο διαχείρισης πακέτων
    εφαρμόστηκε προσωρινή αποθήκευση προειδοποιήσεων μεταγλωττιστή στο δίσκο. Προστέθηκε η επιλογή "cargo metadata" στην εντολή "cargo metadata".--φίλτρο-πλατφόρμα" για να εμφανίζονται μόνο πακέτα που είναι συνδεδεμένα με την καθορισμένη πλατφόρμα προορισμού στη στήλη ανάλυσης εξάρτησης. Προστέθηκε η επιλογή διαμόρφωσης έκδοσης http.ssl για τον καθορισμό έγκυρων εκδόσεων TLS.
    Προστέθηκε η δυνατότητα δημοσίευσης της ενότητας "dev-εξαρτήσεις" χωρίς να καθορίσετε το κλειδί "έκδοση".

  • Ο μεταγλωττιστής rustc παρέχει υποστήριξη τρίτου επιπέδου για πλατφόρμες-στόχους thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 και mips64el-unknown-linux-muslabi64. Το τρίτο επίπεδο περιλαμβάνει βασική υποστήριξη, αλλά χωρίς αυτοματοποιημένες δοκιμές και δημοσίευση επίσημων εκδόσεων.

Πηγή: opennet.ru

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