Οι έξυπνοι δείκτες έχουν πρόσθετα πλεονεκτήματα σε σχέση με τους κανονικούς δείκτες. Εδώ είναι όλα όσα πρέπει να γνωρίζετε για τους έξυπνους δείκτες στο Rust.

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

Το Rust παρέχει επίσης έξυπνους δείκτες με πρόσθετα μεταδεδομένα και δυνατότητες πέρα ​​από τους παραδοσιακούς δείκτες. Οι έξυπνοι δείκτες είναι εύχρηστοι για την αντιμετώπιση διαρροών μνήμης.

Τι είναι οι έξυπνοι δείκτες στο Rust;

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

Το Rust χρησιμοποιεί δομές για την εκτέλεση έξυπνων δεικτών. Έτσι, οι έξυπνοι δείκτες έχουν επίσης δυνατότητες ιδιοκτησίας.

Όταν συνδέετε τη μνήμη που περιέχει δυναμικά εκχωρημένα δεδομένα με έξυπνους δείκτες, κατανέμονται αυτόματα. Οι έξυπνοι δείκτες παρέχουν λειτουργικότητα για τον έλεγχο του Διάρκεια ζωής του αντικειμένου του Rust, καθιστώντας τα εύχρηστα για την πρόληψη σφαλμάτων όπως η αποαναφορά μηδενικού δείκτη και οι διαρροές μνήμης που είναι δημοφιλείς σε άλλες γλώσσες χαμηλού επιπέδου όπως η C και η C++.

Οφέλη από τη χρήση έξυπνων δεικτών

Ακολουθούν ορισμένα οφέλη από τη χρήση έξυπνων δεικτών:

  1. Αυτόματη διαχείριση μνήμης: Οι έξυπνοι δείκτες παρέχουν αυτόματη διαχείριση μνήμης, συμπεριλαμβανομένης της εκχώρησης και της εκχώρησης, σε αντίθεση με τη μη αυτόματη διαχείριση μνήμης με κανονικούς δείκτες.
  2. Βελτιωμένη ασφάλεια: Οι έξυπνοι δείκτες επιβάλλουν τη σημασιολογία ιδιοκτησίας, διασφαλίζοντας ότι μόνο ένας κάτοχος μπορεί να έχει πρόσβαση σε πόρους ανά φορά, αποτρέποντας ίχνη δεδομένων και σφάλματα που σχετίζονται με ταυτόχρονη χρήση.
  3. Ευκαμψία: Το Rust παρέχει πολλούς έξυπνους δείκτες, ο καθένας με το δικό του σύνολο σημασιολογία ιδιοκτησίας για ευέλικτη σύνταξη ασφαλούς κώδικα.
  4. Διαχείριση πόρων: Μπορείτε να χρησιμοποιήσετε έξυπνους δείκτες για να διαχειριστείτε άλλους πόρους, όπως προγράμματα χειρισμού αρχείων και υποδοχές δικτύου, ενσωματώνοντας τους πόρους μέσα σε έναν έξυπνο δείκτη που διευκολύνει τη διαχείριση του κύκλου ζωής τους και διασφαλίζει ότι θα κλείσουν σωστά και θα απελευθερωθούν μετά χρήση.
  5. Βελτιωμένη απόδοση: Οι έξυπνοι δείκτες συμβάλλουν στη βελτίωση της απόδοσης μειώνοντας την αντιγραφή και τις εκχωρήσεις μνήμης—το μειωμένο αποτύπωμα μνήμης από τη χρήση έξυπνων δεικτών οδηγεί σε αυξημένη απόδοση.

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

Τύποι έξυπνων δεικτών

Το Rust παρέχει πολλούς τύπους έξυπνων δεικτών, συμπεριλαμβανομένων Κουτί, Rc, RefCell, και Mutex.

1. The Box Smart Pointer

ο Κουτί Το Smart Pointer είναι ο απλούστερος και πιο συνηθισμένος έξυπνος δείκτης της Rust. ο Κουτί Ο έξυπνος δείκτης βοηθά στην κατανομή τιμών στο σωρό και δημιουργεί έναν δείκτη σε πλαίσιο για προσβασιμότητα.

ο Κουτί Το Smart Pointer είναι εύχρηστο για δυναμική εκχώρηση μνήμης όταν πρέπει να διασφαλίσετε ότι η μνήμη εκχωρείται αυτόματα όταν οι δείκτες είναι εκτός πεδίου εφαρμογής.

Δείτε πώς μπορείτε να δηλώσετε και να χρησιμοποιήσετε το α Κουτί δείκτης:

στκύριος(){

// νέα παρουσία του πλαισίου έξυπνου δείκτη
αφήνω x = Κουτί::νέος(5);
println!(Χ)

}

ο Κουτί Ο τύπος είναι μέρος του πρελούδιο του Rust, επομένως δεν θα χρειαστεί να εισαγάγετε τον τύπο, σε αντίθεση με άλλους έξυπνους δείκτες.

ο Χ μεταβλητή είναι α Κουτί δείκτη που δείχνει την 5 ακέραια τιμή. Το Rust εκχωρεί τη μνήμη για την τιμή στο σωρό και εκχωρεί αυτόματα όταν η μεταβλητή είναι εκτός πεδίου εφαρμογής.

2. Ο έξυπνος δείκτης Rc

ο Rc Ο έξυπνος δείκτης (Reference Counted) παρέχει λειτουργικότητα για τη δημιουργία αξιών κοινής ιδιοκτησίας. ο Rc Οι έξυπνοι δείκτες παρακολουθούν τον αριθμό των αναφορών σε μια τιμή και εκχωρούν την τιμή όταν η τελευταία αναφορά είναι εκτός πεδίου εφαρμογής.

ο Rc Ο έξυπνος δείκτης είναι χρήσιμος όταν πρέπει να μοιραστείτε την ιδιοκτησία μιας αξίας για προσβασιμότητα σε πολλά μέρη του προγράμματός σας.

Για να δηλώσετε ένα Rc έξυπνος δείκτης, θα εισαγάγετε το Rc struct από την τυπική βιβλιοθήκη, δηλώστε ένα νέο Rc δείκτη με το νέος συνάρτηση και κλωνοποιήστε τη μεταβλητή δείκτη με το κλώνος μεταβλητός.

χρήση std:: rc:: Rc;

στκύριος() {

// νέα παρουσία του έξυπνου δείκτη RC
αφήνω x = Rc:: νέο(5);
αφήνω y = Rc:: κλώνος(&x);

println!("x = {}, y = {}", x, y);
}

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

3. Ο έξυπνος δείκτης RefCell

ο RefCell Ο έξυπνος δείκτης παρέχει εσωτερική μεταβλητότητα που επιτρέπει τη συνύπαρξη αμετάβλητων και μεταβλητών αναφορών, εφόσον υπάρχει μία μεταβλητή αναφορά ανά δεδομένη στιγμή.

ο RefCell Ο έξυπνος δείκτης είναι εύχρηστος κατά τη μετάλλαξη τιμών που ανήκουν σε μεταβλητές αναφορές.

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

χρήση std:: κελί:: RefCell;

στκύριος(){

// νέα παρουσία του έξυπνου δείκτη Refcell
αφήνω x = RefCell:: νέο(5);

αφήνω y = x.borrow();
αφήνω z = x.borrow_mut();

println!("y = {}", *y);
println!("z = {}", *z);

}

ο Refcell Ο έξυπνος δείκτης περιέχει την τιμή και το y μεταβλητή είναι η αμετάβλητη αναφορά στην τιμή. ο borrow_mut η συνάρτηση δημιουργεί μια μεταβλητή αναφορά της τιμής.

Το πρόγραμμα είναι ασφαλές εάν υπάρχει μόνο μία μεταβλητή αναφορά κάθε φορά.

4. Ο έξυπνος δείκτης Mutex

ο Mutex Ο έξυπνος δείκτης παρέχει αμοιβαίες εξαιρέσεις. ο Mutex Ο έξυπνος δείκτης είναι εύχρηστος για το συγχρονισμό της πρόσβασης σε τιμές σε πολλαπλά νήματα σε ταυτόχρονα προγράμματα.

ο Mutex Ο έξυπνος δείκτης παρέχει αμοιβαίο αποκλεισμό για να διασφαλίσει ότι μόνο ένα νήμα μπορεί να έχει πρόσβαση στην τιμή ενώ αποτρέπει τα ίχνη δεδομένων.

Θα χρειαστεί να εισαγάγετε το Mutex κατασκευάστε και δημιουργήστε μια νέα παρουσία με το νέος λειτουργία για χρήση Mutex Έξυπνος δείκτης σε σκουριά.

χρήση std:: sync:: Mutex;

στκύριος() {

// νέα παρουσία του δείκτη mutex
αφήνω μετρητής = Mutex:: νέο(0);

{
αφήνωmut num = counter.lock().unwrap();
*αριθμός += 1;
}

println!("Αποτέλεσμα: {}", *counter.lock().unwrap());
}

ο μετρητής μεταβλητή είναι η νέα Mutex παράδειγμα. ο κύριος λειτουργία αποκτά κλειδαριά στο mutex με το κλειδαριά μέθοδος του Mutex παράδειγμα. Η κλειδαριά επιτρέπει την ασφαλή τροποποίηση της τιμής του μετρητή πριν απελευθερώσετε την κλειδαριά και εκτυπώσετε την τιμή.

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

Το Rust's Ownership Model εγγυάται την ασφάλεια της μνήμης

Οι έξυπνοι δείκτες είναι μια από τις προσεγγίσεις της Rust για την ασφάλεια και την ευελιξία της μνήμης. Το μοντέλο ιδιοκτησίας της Rust διασφαλίζει ότι τα προγράμματα χρησιμοποιούν τη μνήμη με ασφάλεια με τον έλεγχο δανεισμού κατά τη στιγμή της μεταγλώττισης.

Ο ελεγκτής δανείου είναι ένα κρίσιμο χαρακτηριστικό του μοντέλου ιδιοκτησίας της Rust που επιβάλλει αυστηρούς κανόνες για την προσβασιμότητα και την τροποποίηση της μνήμης.