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

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

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

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

  • Εφαρμόστηκε υποστήριξη για χαρακτηριστικά για πίνακες αυθαίρετου μεγέθους. Προηγουμένως, λόγω της αδυναμίας καθορισμού γενικών συναρτήσεων για όλες τις ακέραιες τιμές, η τυπική βιβλιοθήκη παρείχε ενσωματωμένη υποστήριξη χαρακτηριστικών μόνο για πίνακες μεγέθους έως 32 στοιχείων (τα χαρακτηριστικά για κάθε μέγεθος ορίστηκαν στατικά). Χάρη στη δημιουργία της λειτουργίας const generics, κατέστη δυνατός ο ορισμός γενικών συναρτήσεων για οποιοδήποτε μέγεθος πίνακα, αλλά δεν περιλαμβάνονται ακόμη στα σταθερά χαρακτηριστικά της γλώσσας, αν και υλοποιούνται στον μεταγλωττιστή και χρησιμοποιούνται τώρα στην τυπική βιβλιοθήκη για τύπους συστοιχιών οποιουδήποτε μεγέθους.
    Για παράδειγμα, η ακόλουθη κατασκευή στο 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 (Το Rust χρησιμοποιεί το 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, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::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

Πηγή: linux.org.ru

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