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

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

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

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

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

    Για να προσθέσετε εξωτερικά μητρώα στο .cargo/config (βρίσκεται στο $HOME ή στον κατάλογο πακέτων)
    υπό την προϋπόθεση ενότητα "[μητρώα]", και για να χρησιμοποιήσετε ένα εξωτερικό μητρώο, η επιλογή "μητρώο" εμφανίστηκε στην περιγραφή κάθε εξάρτησης στο Cargo.toml. Για να συνδεθείτε σε ένα πρόσθετο μητρώο, απλώς τοποθετήστε το διακριτικό ελέγχου ταυτότητας στο αρχείο ~/.cargo/credentials και εκτελέστε την εντολή
    "cargo login --registry=my-registry" και για δημοσίευση πακέτου -
    "cargo publication -registry=my-registry";

  • Προστέθηκε πλήρης υποστήριξη για τη χρήση του τελεστή "?". σε δοκιμές δοκιμές, επιτρέποντάς σας να χρησιμοποιήσετε παράδειγμα κώδικα από την τεκμηρίωση ως δοκιμές. Προηγουμένως χειριστής
    "?" θα μπορούσε να χρησιμοποιηθεί για τη διαχείριση σφαλμάτων κατά την εκτέλεση της δοκιμής μόνο παρουσία της συνάρτησης "fn main()" ή στις συναρτήσεις "#[test]".

  • Σε προσαρμοσμένα χαρακτηριστικά που ορίζονται με χρήση διαδικαστικών μακροεντολών εξασφαλισμένη τη δυνατότητα χρήσης αυθαίρετων συνόλων διακριτικών ("#[attr($tokens)]", "#[attr[$tokens]] και #[attr{$tokens}]"). Προηγουμένως, τα στοιχεία μπορούσαν να καθοριστούν μόνο σε δέντρο/αναδρομική μορφή χρησιμοποιώντας κυριολεκτικά συμβολοσειρές, για παράδειγμα "#[foo(bar, baz(quux, foo = "bar"))]", αλλά τώρα είναι δυνατή η χρήση απαριθμήσεων (' #[εύρος (0. .10)]') και κατασκευές όπως "#[bound(T: MyTrait)]";
  • Σταθεροποιημένοι τύποι (χαρακτηριστικό) TryFrom и TryInto, επιτρέποντας μετατροπές τύπων με χειρισμό σφαλμάτων. Για παράδειγμα, μέθοδοι όπως from_be_bytes με ακέραιους τύπους χρησιμοποιούν πίνακες ως είσοδο, αλλά τα δεδομένα συχνά έρχονται σε τύπο Slice και η μετατροπή μεταξύ πινάκων και τμημάτων είναι προβληματική να γίνει με μη αυτόματο τρόπο. Με τη βοήθεια νέων χαρακτηριστικών, η καθορισμένη λειτουργία μπορεί να εκτελεστεί εν κινήσει μέσω μιας κλήσης στο .try_into(), για παράδειγμα, "let num = u32::from_be_bytes(slice.try_into()?)". Για μετατροπές που πάντα πετυχαίνουν (για παράδειγμα, από τον τύπο u8 σε u32), έχει προστεθεί ένας τύπος σφάλματος Αλάνθαστος, επιτρέποντας διαφανή χρήση
    TryFrom για όλες τις υπάρχουσες υλοποιήσεις του "From".

  • Η λειτουργία έχει καταργηθεί CommandExt::before_exec, το οποίο επέτρεπε την εκτέλεση ενός προγράμματος χειρισμού πριν από την εκτέλεση του exec, το οποίο εκτελέστηκε στο πλαίσιο μιας θυγατρικής διεργασίας που διακλαδώθηκε μετά την κλήση της fork(). Κάτω από αυτές τις συνθήκες, ορισμένοι πόροι της γονικής διαδικασίας, όπως οι περιγραφείς αρχείων και οι αντιστοιχισμένες περιοχές μνήμης, θα μπορούσαν να αντιγραφούν, γεγονός που θα μπορούσε να οδηγήσει σε απροσδιόριστη συμπεριφορά και λανθασμένη λειτουργία των βιβλιοθηκών.
    Συνιστάται η χρήση μιας μη ασφαλούς συνάρτησης αντί για το before_exec CommandExt::pre_exec.

  • Σταθεροποιημένοι ατομικοί ακέραιοι τύποι με υπογεγραμμένους και ανυπόγραφους αριθμούς που κυμαίνονται σε μέγεθος από 8 έως 64 bit (για παράδειγμα, AtomicU8), καθώς και υπογεγραμμένους τύπους NonZeroI[8|16|32|64|128].
  • Ένα νέο τμήμα του API έχει μετακινηθεί στη σταθερή κατηγορία, συμπεριλαμβανομένων των Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub Οι μέθοδοι ] και SystemTime έχουν σταθεροποιηθεί ::checked_[add|sub]. Οι συναρτήσεις iter::from_fn και iter::successors έχουν σταθεροποιηθεί.
  • Για όλους τους ακέραιους τύπους, εφαρμόζονται οι μέθοδοι checked_pow, saturating_pow, wrapping_pow και overflowing_pow.
  • Προστέθηκε η δυνατότητα ενεργοποίησης βελτιστοποιήσεων στο στάδιο της σύνδεσης, καθορίζοντας την επιλογή δημιουργίας "-C linker-plugin-lto".

Πηγή: opennet.ru

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