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

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

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

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

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

  • Σε απαριθμήσεις με αναπαραστάσεις ακέραιων αριθμών (το χαρακτηριστικό "#[repr(Int)]", επιτρέπεται η ρητή ένδειξη του διαχωριστή (αριθμός παραλλαγής στην απαρίθμηση), ακόμη και αν η απαρίθμηση περιέχει πεδία. #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
  • Προστέθηκε ο πυρήνας συνάρτησης::hint::black_box που απλώς επιστρέφει την τιμή που έλαβε. Εφόσον ο μεταγλωττιστής πιστεύει ότι αυτή η συνάρτηση κάνει κάτι, η συνάρτηση black_box μπορεί να χρησιμοποιηθεί για να απενεργοποιήσει τις βελτιστοποιήσεις μεταγλωττιστή για βρόχους κατά την εκτέλεση δοκιμών απόδοσης κώδικα ή κατά την εξέταση του παραγόμενου κώδικα μηχανής (ώστε ο μεταγλωττιστής να μην θεωρήσει τον κώδικα αχρησιμοποίητο και να τον αφαιρέσει). Για παράδειγμα, στο παρακάτω παράδειγμα, το black_box(v.as_ptr()) εμποδίζει τον μεταγλωττιστή να σκεφτεί ότι το διάνυσμα v δεν χρησιμοποιείται. χρήση std::hint::black_box; fn push_cap(v: &mut Vec) { for i σε 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • Ο διαχειριστής πακέτων "cargo" προσφέρει την εντολή "remove", η οποία σας επιτρέπει να αφαιρέσετε εξαρτήσεις από τη δήλωση Cargo.toml από τη γραμμή εντολών.
  • Ένα νέο τμήμα του API έχει μετακινηθεί στην κατηγορία των σταθερών, συμπεριλαμβανομένων των μεθόδων και των εφαρμογών των χαρακτηριστικών έχουν σταθεροποιηθεί:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{first, last, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Προσθέστε υλοποιήσεις AsFd για τύπους κλειδώματος stdio όταν χρησιμοποιείτε το WASI.
    • impl TryFrom > για Box<[T; N]>
    • core::hint::black_box
    • Διάρκεια::try_from_secs_{f32,f64}
    • Επιλογή::αποσυμπίεση
    • std::os::fd
  • Τα εύρη "..X" και "..=X" επιτρέπονται σε πρότυπα.
  • Κατά την κατασκευή του μπροστινού άκρου του μεταγλωττιστή rustc και του backend LLVM, οι λειτουργίες βελτιστοποίησης LTO (Link Time Optimization) και BOLT (Binary Optimization and Layout Tool) χρησιμοποιούνται για την αύξηση της απόδοσης του κώδικα που προκύπτει και τη μείωση της κατανάλωσης μνήμης.
  • Υλοποιήθηκε υποστήριξη επιπέδου 5 για πλατφόρμες armv5te-none-eabi και thumbvXNUMXte-none-eabi. Το τρίτο επίπεδο συνεπάγεται βασική υποστήριξη, αλλά χωρίς αυτοματοποιημένες δοκιμές, δημοσίευση επίσημων εκδόσεων και έλεγχο της δυνατότητας δημιουργίας του κώδικα.
  • Προστέθηκε υποστήριξη για σύνδεση με γενικές βιβλιοθήκες macOS.

Επιπλέον, μπορούμε να σημειώσουμε τη συμπερίληψη στη βάση κωδικών GCC του μεταγλωττιστή front-end της γλώσσας Rust (gccrs). Το frontend περιλαμβάνεται στον κλάδο GCC 13, το οποίο θα κυκλοφορήσει τον Μάιο του 2023. Ξεκινώντας με το GCC 13, το τυπικό κιτ εργαλείων GCC θα μπορεί να χρησιμοποιηθεί για τη μεταγλώττιση προγραμμάτων Rust χωρίς την ανάγκη εγκατάστασης του μεταγλωττιστή rustc που έχει κατασκευαστεί με χρήση των εξελίξεων LLVM. Η εφαρμογή Rust στο GCC 13 θα βρίσκεται σε κατάσταση beta, δεν θα είναι ενεργοποιημένη από προεπιλογή.

Πηγή: opennet.ru

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