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

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

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

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

  • Στα μπλοκ μορφοποίησης γραμμής, εκτός από την προηγουμένως διαθέσιμη δυνατότητα αντικατάστασης μεταβλητών που παρατίθενται ρητά μετά από μια γραμμή με αριθμό και όνομα, εφαρμόζεται η δυνατότητα αντικατάστασης αυθαίρετων αναγνωριστικών με την προσθήκη της έκφρασης "{identifier}" στη γραμμή. Για παράδειγμα: // Προηγουμένως υποστηριζόμενες κατασκευές: println!("Hello, {}!", get_person()); println!("Γεια, {0}!", get_person()); println!("Γεια, {person}!", person = get_person()); // τώρα μπορείτε να καθορίσετε let person = get_person(); println!("Γεια, {person}!");

    Τα αναγνωριστικά μπορούν επίσης να καθοριστούν απευθείας στις επιλογές μορφοποίησης. let (πλάτος, ακρίβεια) = get_format(); for (όνομα, βαθμολογία) στο get_scores() { println!("{name}: {score:width$.precision$}"); }

    Η νέα αντικατάσταση λειτουργεί σε όλες τις μακροεντολές που υποστηρίζουν ορισμό μορφής συμβολοσειράς, με εξαίρεση τη μακροεντολή «πανικός!». στις εκδόσεις 2015 και 2018 της γλώσσας Rust, στην οποία ο πανικός!("{ident}") αντιμετωπίζεται ως κανονική συμβολοσειρά (στο Rust 2021 η αντικατάσταση λειτουργεί).

  • Η συμπεριφορά της δομής std::process::Command στην πλατφόρμα των Windows έχει αλλάξει, έτσι ώστε κατά την εκτέλεση εντολών, για λόγους ασφαλείας, να μην αναζητά πλέον εκτελέσιμα αρχεία στον τρέχοντα κατάλογο. Ο τρέχων κατάλογος αποκλείεται επειδή θα μπορούσε να χρησιμοποιηθεί για την εκτέλεση κακόβουλου κώδικα εάν τα προγράμματα εκτελούνται σε μη αξιόπιστους καταλόγους (CVE-2021-3013). Η νέα εκτελέσιμη λογική ανίχνευσης περιλαμβάνει την αναζήτηση στους καταλόγους Rust, στον κατάλογο εφαρμογών, στον κατάλογο συστήματος των Windows και στους καταλόγους που καθορίζονται στη μεταβλητή περιβάλλοντος PATH.
  • Η τυπική βιβλιοθήκη έχει επεκτείνει τον αριθμό των συναρτήσεων με την ένδειξη "#[must_use]" για να εκδώσει μια προειδοποίηση εάν αγνοηθεί η επιστρεφόμενη τιμή, η οποία βοηθά στον εντοπισμό σφαλμάτων που προκαλούνται από την υπόθεση ότι μια συνάρτηση θα αλλάξει τιμές αντί να επιστρέψει μια νέα τιμή.
  • Ένα νέο τμήμα του API έχει μετακινηθεί στην κατηγορία των σταθερών, συμπεριλαμβανομένων των μεθόδων και των εφαρμογών των χαρακτηριστικών έχουν σταθεροποιηθεί:
    • Μεταδεδομένα::is_symlink
    • Διαδρομή::is_symlink
    • {integer}::saturating_div
    • Επιλογή::unwrap_unchecked
    • Αποτέλεσμα::unwrap_unchecked
    • Αποτέλεσμα::unwrap_err_unchecked
  • Το χαρακτηριστικό "const", το οποίο καθορίζει τη δυνατότητα χρήσης του σε οποιοδήποτε πλαίσιο αντί για σταθερές, χρησιμοποιείται στις συναρτήσεις:
    • Διάρκεια::νέο
    • Διάρκεια::checked_add
    • Διάρκεια::saturating_add
    • Διάρκεια::checked_sub
    • Διάρκεια::saturating_sub
    • Διάρκεια::checked_mul
    • Διάρκεια::saturating_mul
    • Διάρκεια::checked_div
  • Επιτρέπεται η αποαναφορά των δεικτών "*const T" σε περιβάλλοντα "const".
  • Στη Διαχείριση πακέτων Cargo, το πεδίο rust_version έχει προστεθεί στα μεταδεδομένα πακέτου και η επιλογή «--message-format» έχει προστεθεί στην εντολή «cargo install».
  • Ο μεταγλωττιστής υλοποιεί υποστήριξη για τον μηχανισμό προστασίας CFI (Control Flow Integrity), ο οποίος προσθέτει ελέγχους πριν από κάθε έμμεση κλήση για τον εντοπισμό ορισμένων μορφών απροσδιόριστης συμπεριφοράς που θα μπορούσαν ενδεχομένως να οδηγήσουν σε παραβίαση της κανονικής σειράς εκτέλεσης (ροή ελέγχου) ως αποτέλεσμα της χρήση εκμεταλλεύσεων που αλλάζουν δείκτες που είναι αποθηκευμένοι στη μνήμη σε συναρτήσεις.
  • Ο μεταγλωττιστής έχει προσθέσει υποστήριξη για τις εκδόσεις 5 και 6 της μορφής σύγκρισης κάλυψης LLVM, που χρησιμοποιείται για την αξιολόγηση της κάλυψης κώδικα κατά τη διάρκεια της δοκιμής.
  • Στον μεταγλωττιστή, οι απαιτήσεις για την ελάχιστη έκδοση του LLVM ανεβαίνουν στο LLVM 12.
  • Το τρίτο επίπεδο υποστήριξης για την πλατφόρμα x86_64-unknown-none έχει υλοποιηθεί. Το τρίτο επίπεδο περιλαμβάνει βασική υποστήριξη, αλλά χωρίς αυτοματοποιημένες δοκιμές, δημοσίευση επίσημων εκδόσεων ή έλεγχο του αν μπορεί να κατασκευαστεί ο κώδικας.

Επιπλέον, μπορούμε να σημειώσουμε τη δημοσίευση από τη Microsoft για την κυκλοφορία των βιβλιοθηκών Rust για Windows 0.30, οι οποίες σας επιτρέπουν να χρησιμοποιείτε τη γλώσσα Rust για την ανάπτυξη εφαρμογών για το λειτουργικό σύστημα Windows. Το σετ περιλαμβάνει δύο πακέτα crate (windows και windows-sys), μέσω των οποίων μπορείτε να αποκτήσετε πρόσβαση στο Win API στα προγράμματα Rust. Ο κώδικας για την υποστήριξη API δημιουργείται δυναμικά από μεταδεδομένα που περιγράφουν το API, το οποίο σας επιτρέπει να υλοποιείτε υποστήριξη όχι μόνο για υπάρχουσες κλήσεις Win API, αλλά και για κλήσεις που θα εμφανιστούν στο μέλλον. Η νέα έκδοση προσθέτει υποστήριξη για την πλατφόρμα στόχου UWP (Universal Windows Platform) και υλοποιεί τους τύπους Handle και Debug.

Πηγή: opennet.ru

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