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

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

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

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

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

  • Για async συναρτήσεις με Future::Output, είναι πλέον δυνατό να καθοριστούν σχολιασμοί "#[must_use]" που περιλαμβάνουν μια προειδοποίηση εάν αγνοηθεί η επιστρεφόμενη τιμή, η οποία βοηθά στον εντοπισμό σφαλμάτων που προκαλούνται από την υπόθεση ότι η συνάρτηση θα αλλάξει τις τιμές αντί να επιστρέψει μια νέα τιμή. #[must_use] async fn bar() -> u32 { 0 } async fn caller() { bar().wait; } warning: αχρησιμοποίητη έξοδος του μέλλοντος που επιστρέφεται από `bar` που πρέπει να χρησιμοποιηθεί —> src/lib.rs:5:5 | 5 | bar().wait; | ^^^^^^^^^^^ | = σημείωση: «#[warn(unused_must_use)]» είναι ενεργοποιημένο από προεπιλογή
  • Η υλοποίηση των ουρών FIFO std::sync::mpsc (πολυπαραγωγός μεμονωμένος καταναλωτής) έχει ενημερωθεί, η οποία έχει μετατραπεί στη χρήση της μονάδας crossbeam-channel διατηρώντας το προηγούμενο API. Η νέα υλοποίηση διακρίνεται από την επίλυση πολλών προβλημάτων, την υψηλότερη απόδοση και την απλοποιημένη συντήρηση του κώδικα.
  • Ένα νέο τμήμα του API έχει μετακινηθεί στην κατηγορία των σταθερών, συμπεριλαμβανομένων των μεθόδων και των εφαρμογών των χαρακτηριστικών έχουν σταθεροποιηθεί:
    • {integer}::checked_ilog
    • {integer}::checked_ilog2
    • {integer}::checked_ilog10
    • {integer}::ilog
    • {integer}::ilog2
    • {integer}::ilog10
    • NonZeroU*::ilog2
    • NonZeroU*::ilog10
    • NonZero*::BITS
  • Το χαρακτηριστικό "const", το οποίο καθορίζει τη δυνατότητα χρήσης του σε οποιοδήποτε πλαίσιο αντί για σταθερές, χρησιμοποιείται στις συναρτήσεις:
    • char::from_u32
    • char::from_digit
    • char::to_digit
    • πυρήνας::char::from_u32
    • πυρήνας::char::from_digit
  • Ένα τρίτο επίπεδο υποστήριξης έχει εφαρμοστεί για τη χρήση του Rust στον πυρήνα Linux (linuxkernel), καθώς και για το Sony PlayStation 1 (mipsel-sony-psx), PowerPC με AIX (powerpc64-ibm-aix), QNX Neutrino RTOS ( aarch64-unknown-nto-) πλατφόρμες qnx710, x86_64-pc-nto-qnx710). Το τρίτο επίπεδο περιλαμβάνει βασική υποστήριξη, αλλά χωρίς αυτοματοποιημένες δοκιμές, δημοσίευση επίσημων εκδόσεων ή έλεγχο του αν μπορεί να κατασκευαστεί ο κώδικας.

Επιπλέον, μπορούμε να σημειώσουμε τη δημοσίευση από την ARM ενημερώσεων κώδικα που επιτρέπουν τη χρήση της γλώσσας Rust για την ανάπτυξη προγραμμάτων οδήγησης και λειτουργικών μονάδων πυρήνα Linux που συναρμολογούνται για συστήματα που βασίζονται στην αρχιτεκτονική AArch64.

Πηγή: opennet.ru

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