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

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

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

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

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

  • Ο διαχειριστής πακέτων "cargo" προσφέρει την εντολή "add", η οποία σας επιτρέπει να προσθέσετε νέες εξαρτήσεις στη δήλωση Cargo.toml ή να αλλάξετε τις υπάρχουσες εξαρτήσεις από τη γραμμή εντολών. Η εντολή σας επιτρέπει επίσης να καθορίσετε μεμονωμένα χαρακτηριστικά και εκδόσεις, για παράδειγμα: cargo add serde —features Derive cargo add nom@5
  • Προστέθηκε η δυνατότητα χρήσης "#[derive(Default)]" με αριθμούς στους οποίους η προεπιλεγμένη επιλογή ορίζεται χρησιμοποιώντας το χαρακτηριστικό "#[default]". #[παραγωγή(Προεπιλογή)] enum Ίσως { #[προεπιλογή] Τίποτα, Κάτι(T), }
  • Στην πλατφόρμα Linux, χρησιμοποιείται μια πιο συμπαγής και ταχύτερη υλοποίηση του μηχανισμού συγχρονισμού Mutex, που βασίζεται στη χρήση των futexe που παρέχονται από τον πυρήνα του Linux. Σε αντίθεση με την εφαρμογή που χρησιμοποιήθηκε προηγουμένως με βάση τη βιβλιοθήκη pthreads, η νέα έκδοση χρησιμοποιεί μόνο 5 byte αντί για 40 για την αποθήκευση της κατάστασης Mutex. Ομοίως, οι μηχανισμοί κλειδώματος Condvar και RwLock έχουν μεταφερθεί στο futex.
  • Ένα δεύτερο επίπεδο υποστήριξης για την πλατφόρμα στόχου x86_64-unknown-none έχει υλοποιηθεί, σχεδιασμένο για τη δημιουργία εκτελέσιμων αρχείων που μπορούν να λειτουργήσουν χωρίς λειτουργικό σύστημα. Για παράδειγμα, η καθορισμένη πλατφόρμα προορισμού μπορεί να χρησιμοποιηθεί κατά τη σύνταξη στοιχείων πυρήνα. Το δεύτερο επίπεδο υποστήριξης περιλαμβάνει εγγύηση συναρμολόγησης.
  • Το τρίτο επίπεδο υποστήριξης έχει υλοποιηθεί για τις πλατφόρμες aarch64-pc-windows-gnullvm και x86_64-pc-windows-gnullvm. Το τρίτο επίπεδο περιλαμβάνει βασική υποστήριξη, αλλά χωρίς αυτοματοποιημένες δοκιμές, δημοσίευση επίσημων εκδόσεων ή έλεγχο του αν μπορεί να κατασκευαστεί ο κώδικας.
  • Ένα νέο τμήμα του API έχει μετακινηθεί στην κατηγορία των σταθερών, συμπεριλαμβανομένων των μεθόδων και των εφαρμογών των χαρακτηριστικών έχουν σταθεροποιηθεί:
    • bool::then_some
    • f32::total_cmp
    • f64::total_cmp
    • Stdin::lines
    • windows::CommandExt::raw_arg
    • υπονοώ προεπιλεγμένη τιμή για το AssertUnwindSafe
    • Από > για Rc
    • Από > για Arc<[u8]>
    • FusedIterator για EncodeWide

    Πηγή: opennet.ru

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