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

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

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

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

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

  • Ο μεταγλωττιστής rustc διαθέτει ένα σταθεροποιημένο σύστημα που βασίζεται σε LLVM για τη δημιουργία δεδομένων κάλυψης που χρησιμοποιούνται για την αξιολόγηση της κάλυψης κώδικα κατά τη διάρκεια της δοκιμής. Για να ενεργοποιήσετε τα δεδομένα κάλυψης κατά τη συναρμολόγηση, πρέπει να χρησιμοποιήσετε τη σημαία “-Cinstrument-coverage”, για παράδειγμα, ξεκινώντας τη συναρμολόγηση με την εντολή “RUSTFLAGS=”-C instrument-coverage” cargo build”. Μετά την εκτέλεση του εκτελέσιμου αρχείου που έχει μεταγλωττιστεί με αυτόν τον τρόπο, το αρχείο default.profraw θα αποθηκευτεί στον τρέχοντα κατάλογο, για επεξεργασία του οποίου μπορείτε να χρησιμοποιήσετε το βοηθητικό πρόγραμμα llvm-profdata από το στοιχείο llvm-tools-preview. Η έξοδος που επεξεργάζεται το llvm-profdata μπορεί στη συνέχεια να μεταβιβαστεί στο llvm-cov για να δημιουργήσει μια σχολιασμένη αναφορά κάλυψης κώδικα. Πληροφορίες σχετικά με τη σύνδεση με τον πηγαίο κώδικα λαμβάνονται από το εκτελέσιμο αρχείο που εξετάζεται, το οποίο περιλαμβάνει τα απαραίτητα δεδομένα σχετικά με τη σύνδεση μεταξύ των μετρητών κάλυψης και του κώδικα. 1| 1|fn main() { 2| 1| println! ("Γεια, κόσμο!"); 3| 1|}
  • Στον διαχειριστή πακέτων φορτίου, έχει σταθεροποιηθεί η υποστήριξη για τη σημαία "-timings", η οποία περιλαμβάνει τη δημιουργία μιας λεπτομερούς αναφοράς σχετικά με την πρόοδο της κατασκευής και τον χρόνο εκτέλεσης κάθε βήματος. Η αναφορά μπορεί να είναι χρήσιμη για τη βελτιστοποίηση της απόδοσης της διαδικασίας συναρμολόγησης.
  • Ο διαχειριστής πακέτων φορτίου προσφέρει μια νέα σύνταξη για τον μηχανισμό μεταγλώττισης υπό όρους και επιλογής προαιρετικών εξαρτήσεων, που έχει ρυθμιστεί στο αρχείο Cargo.toml παραθέτοντας μια λίστα με επώνυμες ιδιότητες στην ενότητα [features] και ενεργοποιείται ενεργοποιώντας τις ιδιότητες κατά τη διάρκεια της δημιουργίας του πακέτου χρησιμοποιώντας τη σημαία "--features". Η νέα έκδοση προσθέτει υποστήριξη για εξαρτήσεις σε ξεχωριστούς χώρους ονομάτων και αδύναμες εξαρτήσεις.

    Στην πρώτη περίπτωση, είναι δυνατό να χρησιμοποιηθούν στοιχεία με το πρόθεμα "dep:" εντός της ενότητας "[features]" για τη ρητή σύνδεση με μια προαιρετική εξάρτηση χωρίς σιωπηρή αναπαράσταση αυτής της εξάρτησης ως χαρακτηριστικό. Στη δεύτερη περίπτωση, προστέθηκε υποστήριξη για τη σήμανση με το σύμβολο «;». ("όνομα πακέτου;/όνομα λειτουργίας") προαιρετικές εξαρτήσεις που πρέπει να περιλαμβάνονται μόνο εάν κάποια άλλη ιδιότητα περιλαμβάνει τη δεδομένη προαιρετική εξάρτηση. Για παράδειγμα, στο παρακάτω παράδειγμα, η ενεργοποίηση της ιδιότητας serde θα ενεργοποιήσει την εξάρτηση "serde", καθώς και την ιδιότητα "serde" για την εξάρτηση "rgb", αλλά μόνο εάν η εξάρτηση "rgb" είναι ενεργοποιημένη αλλού: [εξαρτήσεις] serde = { version = " 1.0.133", optional = true } rgb = { version = "0.8.25", optional = true } [χαρακτηριστικά] serde = ["dep:serde", "rgb?/serde"]

  • Επιστράφηκε η υποστήριξη για τη σταδιακή συλλογή, η οποία ήταν απενεργοποιημένη στην τελευταία έκδοση. Το σφάλμα του μεταγλωττιστή που προκάλεσε την απενεργοποίηση της δυνατότητας έχει επιλυθεί.
  • Επιλύθηκαν ορισμένα προβλήματα με την παροχή στους Instant χρονοδιακόπτες με εγγύηση μονοτονικού χρονισμού, ο οποίος λαμβάνει υπόψη τον χρόνο που αφιερώνει το σύστημα σε κατάσταση αναστολής λειτουργίας. Προηγουμένως, το API του λειτουργικού συστήματος χρησιμοποιούταν όποτε ήταν δυνατό για τη λειτουργία του χρονοδιακόπτη, το οποίο δεν λάμβανε υπόψη προβληματικές καταστάσεις που σπάνε τη μονοτονία του χρόνου, όπως προβλήματα υλικού, χρήση εικονικοποίησης ή σφάλματα στο λειτουργικό σύστημα.
  • Ένα νέο τμήμα του API έχει μετακινηθεί στην κατηγορία των σταθερών, συμπεριλαμβανομένων των μεθόδων και των εφαρμογών των χαρακτηριστικών έχουν σταθεροποιηθεί:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • usize::abs_diff
    • Εμφάνιση για io::ErrorKind
    • Από για ExitCode
    • Οχι για ! (πληκτρολογήστε "ποτέ")
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Το τρίτο επίπεδο υποστήριξης έχει εφαρμοστεί για τις πλατφόρμες mips64-openwrt-linux-musl* και armv7-unknown-linux-uclibceabi (softfloat). Το τρίτο επίπεδο περιλαμβάνει βασική υποστήριξη, αλλά χωρίς αυτοματοποιημένες δοκιμές, δημοσίευση επίσημων εκδόσεων ή έλεγχο του αν μπορεί να κατασκευαστεί ο κώδικας.
  • Ο μεταγλωττιστής έχει αλλάξει σε χρήση LLVM 14.

Επιπλέον, μπορείτε να σημειώσετε:

  • Προστέθηκε υποστήριξη για την εκκίνηση του μεταγλωττιστή rustc χρησιμοποιώντας το backend rustc_codegen_gcc, το οποίο σας επιτρέπει να χρησιμοποιήσετε τη βιβλιοθήκη libgccjit από το έργο GCC ως γεννήτρια κώδικα στο rustc, που επιτρέπει στο rustc να παρέχει υποστήριξη για αρχιτεκτονικές και βελτιστοποιήσεις που είναι διαθέσιμες στο GCC. Προώθηση μεταγλωττιστή σημαίνει τη δυνατότητα χρήσης μιας γεννήτριας κώδικα που βασίζεται στο GCC στο rustc για την κατασκευή του ίδιου του μεταγλωττιστή rustc. Από την πρακτική πλευρά, αυτή η δυνατότητα σάς επιτρέπει να δημιουργείτε προγράμματα σκουριάς για αρχιτεκτονικές που δεν υποστηρίζονταν προηγουμένως στο rustc.
  • Διατίθεται η έκδοση της εργαλειοθήκης uutils coreutils 0.0.13, εντός της οποίας αναπτύσσεται ένα ανάλογο του πακέτου GNU Coreutils, ξαναγραμμένο στη γλώσσα Rust. Το Coreutils συνοδεύεται από περισσότερα από εκατό βοηθητικά προγράμματα, όπως sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln και ls. Στόχος του έργου είναι η δημιουργία μιας εναλλακτικής υλοποίησης Coreutils σε πολλαπλές πλατφόρμες, ικανή να εκτελείται σε πλατφόρμες Windows, Redox και Fuchsia, καθώς και να διανέμεται με την άδεια MIT, αντί της άδειας GPL copyleft.

    Η νέα έκδοση έχει βελτιώσει τις υλοποιήσεις πολλών βοηθητικών προγραμμάτων, συμπεριλαμβανομένης της σημαντικά βελτιωμένης συμβατότητας των βοηθητικών προγραμμάτων cp, dd, df, split και tr με τα αντίστοιχα του έργου GNU. Παρέχεται ηλεκτρονική τεκμηρίωση. Το clap parser χρησιμοποιείται για την ανάλυση ορισμάτων γραμμής εντολών, το οποίο έχει βελτιώσει την έξοδο για τη σημαία "--help" και έχει προσθέσει υποστήριξη για συντομογραφίες μεγάλων εντολών (για παράδειγμα, μπορείτε να καθορίσετε "ls -col" αντί για "ls -color ”).

Πηγή: opennet.ru

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