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

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

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

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

  • Προστέθηκε μια λειτουργία μεταγλώττισης με διοχέτευση (pipelined), στην οποία η δημιουργία ενός πακέτου εξαρτημένου κιβωτίου ξεκινά μόλις γίνουν διαθέσιμα τα μεταδεδομένα εξάρτησης, χωρίς να περιμένουμε την ολοκλήρωση της μεταγλώττισης. Κατά τη μεταγλώττιση ενός πακέτου, δεν χρειάζεται να έχετε συγκεντρώσει όλες τις εξαρτήσεις, απλώς πρέπει να ορίσετε τα μεταδεδομένα, τα οποία περιλαμβάνουν λίστες τύπων, εξαρτήσεων και εξαγόμενων στοιχείων. Τα μεταδεδομένα είναι διαθέσιμα νωρίς στη διαδικασία μεταγλώττισης, επομένως τα συνδεδεμένα πακέτα μπορούν πλέον να μεταγλωττίζονται πολύ νωρίτερα. Κατά τη δημιουργία μεμονωμένων πακέτων, η προτεινόμενη λειτουργία δεν επηρεάζει την απόδοση, αλλά εάν η έκδοση καλύπτει πακέτα με διακλαδισμένες εξαρτήσεις, ο συνολικός χρόνος κατασκευής μπορεί να μειωθεί κατά 10-20%.
  • Εξασφαλίζει τον εντοπισμό λανθασμένης χρήσης των λειτουργιών std::mem::unitialized и std::mem::zeroed. Για παράδειγμα, το std::mem::unitialized είναι βολικό για τη γρήγορη δημιουργία πινάκων, αλλά παραπλανά τον μεταγλωττιστή επειδή φαίνεται να έχει αρχικοποιηθεί, αλλά στην πραγματικότητα η τιμή παραμένει μη αρχικοποιημένη. Η συνάρτηση mem::unitialized έχει ήδη επισημανθεί ως καταργημένη και συνιστάται η χρήση ενός ενδιάμεσου τύπου Ίσως Μονάδα. Όσο για το mem::zeroed, αυτή η συνάρτηση μπορεί να προκαλέσει προβλήματα με τύπους που δεν μπορούν να δεχθούν μηδενικές τιμές.

    Για να βοηθήσει στον εντοπισμό απροσδιόριστης συμπεριφοράς, η νέα έκδοση προσθέτει έναν έλεγχο χνούδι στον μεταγλωττιστή που εντοπίζει ορισμένα προβλήματα με το mem::unitialized ή το mem::zeroed. Για παράδειγμα, λαμβάνετε τώρα ένα σφάλμα όταν προσπαθείτε να χρησιμοποιήσετε το mem::unitialized ή το mem::zeroed με τους τύπους &T και Box‹T›, που αντιπροσωπεύουν αντικείμενα δείκτη που δεν μπορούν να δεχθούν μηδενικές τιμές.

  • Το χαρακτηριστικό "#[deprecated]" έχει επεκταθεί για να επιτραπεί η επισήμανση πακέτων κλουβιών ως απαρχαιωμένα και προγραμματισμένη για μελλοντική διαγραφή. Από το Rust 1.38, αυτό το χαρακτηριστικό μπορεί επίσης να χρησιμοποιηθεί για μακροεντολές.
  • Προστέθηκε η δυνατότητα χρήσης του χαρακτηριστικού "#[global_allocator]" σε υποενότητες.
  • Προστέθηκε λειτουργία std:: any::type_name, το οποίο σας επιτρέπει να μάθετε το όνομα του τύπου, το οποίο μπορεί να είναι χρήσιμο για σκοπούς εντοπισμού σφαλμάτων. Για παράδειγμα, κατά την εκτέλεση του προγράμματος μπορείτε να μάθετε για ποιον τύπο ονομάστηκε η συνάρτηση:

    fn gen_value‹T: Προεπιλογή>() -› T {
    println!("Initializing an instance of {}", std::any::type_name::‹T›());
    Προεπιλογή::default()
    }

    fn main() {
    έστω _: i32 = gen_value(); Θα εκτυπωθεί # "i32".
    έστω _: String = gen_value(); # θα εκτυπώσει "alloc::string::String"
    }

  • Εκτεταμένες λειτουργίες της τυπικής βιβλιοθήκης:
    • slice::{concat, connect, join} μπορεί τώρα να λάβει την τιμή &[T] εκτός από το &T;
    • Τα "*const T" και "*mut T" εφαρμόζουν τώρα το marker::Unpin;
    • Τα "Arc‹[T]›" και "Rc‹[T]›" εφαρμόζουν τώρα το FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} τώρα εφαρμόστε το DoubleEndedIterator.
    • ascii::EscapeDefault υλοποιεί Clone και Display.
  • Ένα νέο τμήμα API μεταφέρθηκε στη σταθερή κατηγορία, συμπεριλαμβανομένων μεθόδων που έχουν σταθεροποιηθεί
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Διάρκεια::as_secs_f{32|64},
    • Διάρκεια::div_duration_f{32|64},
    • Διάρκεια::div_f{32|64},
    • Διάρκεια::from_secs_f{32|64},
    • Διάρκεια::mul_f{32|64},
    • διαίρεση με υπόλοιπο
      div_euclid και rem_euclid για όλους τους ακέραιους αρχικούς αριθμούς.

  • Προστέθηκε υποστήριξη για τον καθορισμό της επιλογής "--features" πολλές φορές για την ενεργοποίηση διαφορετικών λειτουργιών στη διαχείριση πακέτων φορτίου.
  • Ο μεταγλωττιστής παρέχει ένα τρίτο επίπεδο υποστήριξη για πλατφόρμες προορισμού aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc-unknown targets, armlinux7 -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl και riscv32i-unknown-none-elf. Το τρίτο επίπεδο περιλαμβάνει βασική υποστήριξη, αλλά χωρίς αυτοματοποιημένες δοκιμές και δημοσίευση επίσημων εκδόσεων.

Πηγή: opennet.ru

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