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

Που δημοσιεύθηκε έκδοση 1.47 της γλώσσας προγραμματισμού συστήματος Σκωρία, που ιδρύθηκε από το έργο Mozilla. Η γλώσσα εστιάζει στην ασφάλεια της μνήμης, παρέχει αυτόματη διαχείριση της μνήμης και παρέχει ένα μέσο για την επίτευξη υψηλού παραλληλισμού εργασιών χωρίς τη χρήση συλλέκτης σκουπιδιών и runtime (Ο χρόνος εκτέλεσης καταλήγει στη βασική προετοιμασία και συντήρηση της τυπικής βιβλιοθήκης).

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

Ο κύριος καινοτομίες:

  • Υλοποιήθηκε υποστήριξη για τύπους πίνακες οποιοδήποτε μέγεθος. Προηγουμένως, λόγω της αδυναμίας καθορισμού γενικών συναρτήσεων για όλες τις ακέραιες τιμές, η τυπική βιβλιοθήκη παρείχε ενσωματωμένη υποστήριξη χαρακτηριστικών μόνο για πίνακες μεγέθους έως 32 στοιχείων (τα χαρακτηριστικά για κάθε μέγεθος ορίστηκαν στατικά). Χάρη στη δημιουργία της λειτουργικότητας των σταθερών γενικών στοιχείων ("const generic"), κατέστη δυνατός ο ορισμός γενικών συναρτήσεων για οποιοδήποτε μέγεθος πίνακα, αλλά δεν περιλαμβάνονται ακόμη στα χαρακτηριστικά σταθερής γλώσσας, αν και υλοποιούνται στον μεταγλωττιστή και τώρα εμπλεγμένος στην τυπική βιβλιοθήκη για χαρακτηριστικά πίνακα οποιουδήποτε μεγέθους.

    Για παράδειγμα, η ακόλουθη κατασκευή στο Rust 1.47 θα εκτυπώσει τα περιεχόμενα ενός πίνακα, αν και προηγουμένως θα είχε ως αποτέλεσμα ένα σφάλμα:

    fn main() {
    έστω xs = [0; 34];

    println!("{:?}", xs);
    }

  • Παρέχεται έξοδος μικρότερων ιχνών (backtrace), έξοδος σε καταστάσεις έκτακτης ανάγκης. Στοιχεία που δεν παρουσιάζουν ενδιαφέρον στις περισσότερες περιπτώσεις, αλλά ακαταστάζουν το αποτέλεσμα και αποσπούν την προσοχή από τις κύριες αιτίες του προβλήματος, εξαιρούνται από το ίχνος. Για να επιστρέψετε ένα πλήρες ίχνος, μπορείτε να χρησιμοποιήσετε τη μεταβλητή περιβάλλοντος "RUST_BACKTRACE=full". Για παράδειγμα, για τον κώδικα

    fn main() {
    πανικός!();
    }

    Προηγουμένως, το ίχνος εξαγόταν σε 23 στάδια, αλλά τώρα θα μειωθεί σε
    3 βήματα που σας επιτρέπουν να κατανοήσετε αμέσως την ουσία:

    νήμα 'main' πανικοβλήθηκε στο 'explicit panic', src/main.rs:2:5
    stack backtrace:
    0: std::panicking::begin_panic
    στο /rustc/d…d75a/library/std/src/panicking.rs:497
    1: παιδική χαρά::κύρια
    στο ./src/main.rs:2
    2: πυρήνας::ops::function::FnOnce::call_once
    στο /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Ο μεταγλωττιστής rustc έχει ενημερωθεί για κατασκευή με χρήση LLVM 11 (Σκουριά χρήσεις LLVM ως backend για δημιουργία κώδικα). Ταυτόχρονα, διατηρείται η δυνατότητα κατασκευής με παλαιότερα LLVM, έως την έκδοση 8, αλλά από προεπιλογή (στο rust-lang/llvm-project) χρησιμοποιεί τώρα το LLVM 11. Το LLVM 11 αναμένεται να κυκλοφορήσει τις επόμενες ημέρες.
  • Στην πλατφόρμα των Windows, ο μεταγλωττιστής rustc παρέχει υποστήριξη για την ενεργοποίηση ελέγχων ακεραιότητας ροής ελέγχου (Control Flow Guard), που ενεργοποιείται χρησιμοποιώντας τη σημαία "-C control-flow-guard". Σε άλλες πλατφόρμες αυτή η σημαία αγνοείται προς το παρόν.
  • Ένα νέο τμήμα API μεταφέρθηκε στη σταθερή κατηγορία, συμπεριλαμβανομένων των σταθεροποιημένων
    Ident::new_raw,
    Εύρος::is_empty,
    RangeInclusive::is_empty,
    Αποτέλεσμα::as_deref,
    Αποτέλεσμα::as_deref_mut,
    Vec::διαρροή,
    δείκτης::offset_from,
    f32::TAU και
    f64::TAU.

  • Το χαρακτηριστικό "const", το οποίο καθορίζει τη δυνατότητα χρήσης του σε οποιοδήποτε πλαίσιο αντί για σταθερές, χρησιμοποιείται στις μεθόδους:
    • νέο για όλους τους ακέραιους εκτός από το μηδέν.
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub και saturating_mul για όλους τους ακέραιους αριθμούς.
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_πεζά, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace and is_control forum.
  • Για το FreeBSD εμπλεγμένος εργαλειοθήκη από το FreeBSD 11.4 (Το FreeBSD 10 δεν υποστηρίζει το LLVM 11).

Πηγή: opennet.ru

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