Κυκλοφόρησε το Rust 1.78. Γλώσσα Borgo που συνδυάζει τα δυνατά σημεία του Go και του Rust

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

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

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

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

  • Ένας νέος χώρος ονομάτων χαρακτηριστικών "#[diagnostic]" έχει προταθεί, παρέχοντας ένα μέσο για να επηρεαστούν τα μηνύματα σφάλματος που παράγονται από τον μεταγλωττιστή. Το πρώτο στο νέο χώρο είναι το χαρακτηριστικό "#[diagnostic::on_unimplemented]", το οποίο μπορεί να χρησιμοποιηθεί για την προσαρμογή των μηνυμάτων σφάλματος που εμφανίζονται σε μια κατάσταση όπου πρέπει να χρησιμοποιήσετε ένα χαρακτηριστικό που δεν έχει εφαρμοστεί για τον τύπο. #[diagnostic::on_unimplemented( message = "My Message for `ImportantTrait<{A}>` is not implemented for `{Self}`", label = "My Label", note = "Note 1", note = "Note 2" )] χαρακτηριστικό ImportantTrait {} fn use:_rait ) {} fn main() { use_my_trait(String::new()); } error[E32]: Το μήνυμά μου για το `ImportantTrait Το ` δεν υλοποιείται για το `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Η ετικέτα μου | | | απαιτείται από ένα δεσμό που εισάγεται από την παρούσα πρόσκληση | = βοήθεια: το χαρακτηριστικό `ImportantTrait Το ` δεν υλοποιείται για το `String` = σημείωση: Σημείωση 18 = σημείωση: Σημείωση 12
  • Οι προκαταρκτικοί έλεγχοι που εφαρμόζονται σε μη ασφαλείς συναρτήσεις μπορούν τώρα να αναβληθούν μέχρι τη δημιουργία κώδικα, επιτρέποντας την εκτέλεση αυτών των ελέγχων χωρίς την ανάγκη δημιουργίας της τυπικής βιβλιοθήκης σε λειτουργία "#[cfg(debug_assertions)]". Για να ενεργοποιήσετε τους ελέγχους, αρκεί πλέον να ενεργοποιήσετε τις βεβαιώσεις εντοπισμού σφαλμάτων για δοκιμές ή εκδόσεις εντοπισμού σφαλμάτων του κώδικά σας.
  • Η συμπεριφορά των συναρτήσεων στην τυπική βιβλιοθήκη που επηρεάζουν την ευθυγράμμιση των δεικτών και των τομών είναι πλέον προβλέψιμη κατά το χρόνο εκτέλεσης και εξαρτάται από τα δεδομένα εισόδου. Ο δείκτης συνάρτησης::align_offset, ο οποίος υπολογίζει τη μετατόπιση για την ευθυγράμμιση του δείκτη, τώρα επιστρέφει usize::MAX μόνο εάν η λειτουργία αποτύχει. Οι συναρτήσεις slice::align_to και slice::align_to_mut και οι δύο, οι οποίες μετατρέπουν τις φέτες σε μια αναπαράσταση με μια ευθυγραμμισμένη μεσαία φέτα και τις αρχικές φέτες αρχής και τέλους, τώρα επιστρέφουν πάντα το μεγαλύτερο μεσαίο τμήμα.
  • Στη σταθερή κατηγορία μεταφέρθηκαν:
    • impl Read for &Stdin
    • Επιτρέψτε τη χρήση μιας μη στατικής (μη στατικής) διάρκειας ζωής για ορισμένες υλοποιήσεις std::error::σχετιζόμενες με σφάλματα.
    • Impl υλοποίηση επιτρέπεται η χρήση της τιμής ?Sized.
    • υπονοώ Από για io::Σφάλμα
  • Η συνάρτηση Barrier::new() έχει σταθεροποιηθεί ώστε να χρησιμοποιείται με το χαρακτηριστικό "const" σε οποιοδήποτε περιβάλλον αντί για σταθερές.
  • Πλατφόρμες στόχευσης x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm και i686vullm τουλάχιστον έκδοση των Windows τώρα-c 10.
  • Το τρίτο επίπεδο υποστήριξης έχει εφαρμοστεί για τις πλατφόρμες wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf και loongarch64-unknown-linux-musl. Το τρίτο επίπεδο περιλαμβάνει βασική υποστήριξη, αλλά χωρίς αυτοματοποιημένες δοκιμές, δημοσίευση επίσημων εκδόσεων ή έλεγχο του αν μπορεί να κατασκευαστεί ο κώδικας.
  • Το δεύτερο επίπεδο υποστήριξης για την πλατφόρμα στόχο Add wasm32-wasip1 έχει υλοποιηθεί. Το δεύτερο επίπεδο υποστήριξης περιλαμβάνει εγγύηση συναρμολόγησης.
  • Η πλατφόρμα wasm32-wasi-preview1-threads έχει μετονομαστεί σε wasm32-wasip1-threads.
  • Ο μεταγλωττιστής έχει αλλάξει σε χρήση LLVM 18. Όταν χρησιμοποιείται το LLVM 18 για αρχιτεκτονικές x86-32 και x86-64, το ABI που σχετίζεται με τους τύπους u128 και i128 έχει αλλάξει.
  • Στο Cargo pact manager, η έκδοση 4 των αρχείων κλειδώματος (lockfile v4) έχει σταθεροποιηθεί.
  • Το Cargo διαθέτει μια σταθεροποιημένη παγκόσμια κρυφή μνήμη με πληροφορίες σχετικά με την πιο πρόσφατη χρήση δεδομένων. Η κρυφή μνήμη φιλοξενείται σε $CARGO_HOME/.global-cache χρησιμοποιώντας SQLite και ενημερώνεται αυτόματα για να αντικατοπτρίζει τις πιο πρόσφατες αλλαγές στο ευρετήριο, το αρχείο κλουβιού, τον κατάλογο κώδικα, τον κλώνο git και το git checkout.

Επιπλέον, η γλώσσα προγραμματισμού Borgo προσπαθεί να είναι πιο εκφραστική από τη γλώσσα Go, αλλά λιγότερο περίπλοκη από τη γλώσσα Rust. Το Borgo συνδυάζει τα καλύτερα χαρακτηριστικά του Go και του Rust, αναπληρώνοντας τις ελλείψεις κάθε γλώσσας. Για παράδειγμα, το Go είναι απλό και απλό, αλλά δεν παρέχει προηγμένα χαρακτηριστικά ασφαλείας. Η γλώσσα Rust παρέχει εργαλεία για ασφαλή προγραμματισμό, αλλά είναι υπερβολικά περίπλοκη. Το έργο αναπτύσσεται από τον Marco Sampellegrini, συγγραφέα του The Simple Haskell Handbook και προγραμματιστή του συστήματος συνεχούς ολοκλήρωσης Quad CI.

Κυκλοφόρησε το Rust 1.78. Γλώσσα Borgo που συνδυάζει τα δυνατά σημεία του Go και του Rust

Το Borgo χρησιμοποιεί στατική πληκτρολόγηση, τύπους τύπου Go και σύνταξη τύπου Rust. Τα ερωτηματικά είναι προαιρετικά στο τέλος των γραμμών στον κώδικα Borgo. Ο κώδικας Borgo μεταγλωττίζεται σε μια αναπαράσταση Go που είναι πλήρως συμβατή με τα υπάρχοντα πακέτα Go. Ο κώδικας του μεταγλωττιστή είναι γραμμένος σε Rust και διανέμεται με την άδεια ISC. χρησιμοποιήστε το fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response { title: string, duration: int, } fn main() { let res = Response { title: “Hello world”, duration: 0, } let state = NetworkState.Success(res) let msg = match state { NetworkState.stilling NetworkState.Failed(code) => fmt.Sprintf("Got error code: %d", code), NetworkState.Success(res) => res.title, } fmt.Println(msg) }

Πηγή: opennet.ru

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