7 λόγοι για να χρησιμοποιήσετε το Rust για το επόμενο αναπτυξιακό σας έργο

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

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

Ας ξεκινήσουμε!

Τι είναι η Σκουριά;

Η Rust είναι μια γλώσσα προγραμματισμού συστημάτων. Ξεκίνησε ως προσωπικό έργο του Graydon Hoare, ενός προγραμματιστή, το 2006. Σε λιγότερο από μια δεκαετία, έχει εξελιχθεί σε μια δημοφιλής επιλογή για προγραμματισμό συστημάτων και συναφείς εφαρμογές. Ο μέσος μισθός ενός προγραμματιστή Rust είναι περίπου $120.000.

Επομένως, αν θέλετε να μεταβείτε από τη C++ στη Rust ή θέλετε να μάθετε μια νέα γλώσσα, η εκμάθηση της Rust μπορεί να είναι μια εξαιρετική επιλογή! Σύμφωνα με την έρευνα του StackOverflow Developer, η Rust έχει ψηφιστεί ως η πιο αγαπημένη γλώσσα προγραμματισμού – για επτά συνεχόμενα χρόνια.

Πηγή εικόνας: StackOverflow

Το Rust προσφέρει την ταχύτητα γλωσσών προγραμματισμού συστημάτων χαμηλού επιπέδου όπως η C και η C++ και την ασφάλεια γλωσσών προγραμματισμού υψηλού επιπέδου όπως η Python.

Από αξιόλογα έργα όπως το Dropbox και το Firefox μέχρι το WebAssembly και τον ενσωματωμένο προγραμματισμό, το Rust χρησιμοποιείται ευρέως σε όλους τους τομείς ανάπτυξης λογισμικού. Η Rust προσφέρει υποστήριξη διαχείρισης πακέτων εκτός συσκευασίας μέσω της Cargo.

Cargo: The Package Manager for Rust

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

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

Χρήσιμα μηνύματα λάθους

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

Ένα παράδειγμα μηνύματος σφάλματος

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

Σε αυτό το παράδειγμα, η μεταβλητή num2 ορίζεται μέσα στη συνάρτηση inner(). Επομένως, περιορίζεται στο εύρος της λειτουργίας. Εάν προσπαθήσετε να αποκτήσετε πρόσβαση εκτός της συνάρτησης, ο μεταγλωττιστής εκτελεί ένα σφάλμα:

fn main() {
    let num1 = 10;
    fn inner(){
        let num2 = 9; 
    }
    println!("The value of num2 is: {}", num2);
}

Και το μήνυμα σφάλματος δίνει πληροφορίες για το τι πρέπει να διορθωθεί.

error[E0425]: cannot find value `num2` in this scope
 --> src/main.rs:6:42
  |
6 |     println!("The value of num2 is: {}", num2);
  |                                          ^^^^ help: a local variable with a similar name exists: `num1`

Προειδοποιήσεις κατά τη σύνταξη

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

fn main() {
    let num1 = 10;
    let num2 = 9;
    println!("The value of num1 is: {}", num1);
}

Εδώ, η μεταβλητή num2 δηλώνεται αλλά δεν χρησιμοποιείται ποτέ.

warning: unused variable: `num2`
 --> src/main.rs:3:9
  |
3 |     let num2 = 9;
  |         ^^^^ help: if this is intentional, prefix it with an underscore: `_num2`
  |

Γλώσσα με έντονη πληκτρολόγηση

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

  Διευθύνσεις email μιας χρήσης (DEA) Επεξήγηση σε 5 λεπτά ή λιγότερο

Για παράδειγμα, ο κώδικας Python στο παρακάτω κελί κώδικα θα εκτελεστεί χωρίς σφάλματα. Αυτό οφείλεται στο γεγονός ότι στην Python, ένας μη μηδενικός αριθμός έχει μια τιμή αλήθειας True, και ως εκ τούτου, η πρόταση if εκτελείται χωρίς σφάλματα – παρόλο που ο αριθμός 10 είναι ακέραιος αριθμός – και όχι Boolean.

num1 = 10
if num1:
    num2 = 9
print(f"num2 is {num2}")

# Output: num2 is 9

Από την άλλη, ο Rust δεν εξαναγκάζει τους τύπους. Άρα ο παρακάτω κώδικας θα βγάλει ένα σφάλμα:

fn main() {
    let num1 = 10;
    if num1{
        let num2 = 9; 
    }
}

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

error[E0308]: mismatched types
 --> src/main.rs:3:8
  |
3 |     if num1{
  |        ^^^^ expected `bool`, found integer

Ασφάλεια μνήμης

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

Οι μεταβλητές πρέπει να αρχικοποιηθούν πριν χρησιμοποιηθούν

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

#include <stdio.h>

int main(void) {
    int num;
	printf("The value of num is %d", num);
	return 0;
}
// Output: The value of num is 0

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

fn main() {
    let num:i32;
    println!("The value of num is: {}",num);
}
error[E0381]: used binding `num` isn't initialized
 --> src/main.rs:3:40
  |
2 |     let num:i32;
  |         --- binding declared here but left uninitialized
3 |     println!("The value of num is: {}",num);
  |                                        ^^^ `num` used here but it isn't initialized
  |

Ασφάλεια μνήμης κατά το χρόνο μεταγλώττισης

Το Rust διασφαλίζει την ασφάλεια της μνήμης κατά το χρόνο μεταγλώττισης. Ας πάρουμε ένα απλό παράδειγμα. Εδώ, παρόλο που η πρόταση υπό όρους if έχει μια Boolean τιμή true, που σημαίνει ότι η τιμή του num θα είναι πάντα 100, λαμβάνουμε ένα σφάλμα όταν προσπαθούμε να εκτυπώσουμε την τιμή του num.

fn main() {
    let num:i32;
    if true{
        num = 100;
    }
    println!("The value of num is: {}", num);
}

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

error[E0381]: used binding `num` is possibly-uninitialized
 --> src/main.rs:6:41
  |
2 |     let num:i32;
  |         --- binding declared here but left uninitialized
3 |     if true{
  |        ---- if this `if` condition is `false`, `num` is not initialized
4 |         num = 100;
5 |     }
  |      - an `else` arm might be missing here, initializing `num`
6 |     println!("The value of num is: {}", num);
  |                                         ^^^ `num` used here but it is possibly-uninitialized

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

fn main() {
    let num:i32;
    if true{
        num = 100;
    }
    else{
        num = 50;
    }
    println!("The value of num is: {}", num);
}
The value of num is: 100

Αμετάβλητο Μεταβλητών

Είναι επίσης χρήσιμο να σημειωθεί ότι οι μεταβλητές στο Rust είναι αμετάβλητες από προεπιλογή. Αυτό σημαίνει ότι ως προγραμματιστής, δεν χρειάζεται να ανησυχείτε μήπως αντικαταστήσετε κατά λάθος την τιμή μιας συγκεκριμένης μεταβλητής. Εδώ είναι ένα παράδειγμα:

fn main() {
    let num1 = 10;
    num1 = 5;
    println!("The value of num1 is: {}", num1);
}

Καθώς το num1 έχει αρχικοποιηθεί σε 10, όταν προσπαθείτε να του εκχωρήσετε μια τιμή 5, λαμβάνετε ένα μήνυμα λάθους που λέει “δεν είναι δυνατή η ανάθεση δύο φορές σε αμετάβλητη μεταβλητή num1”.

error[E0384]: cannot assign twice to immutable variable `num1`
 --> src/main.rs:3:5
  |
2 |     let num1 = 10;
  |         ----
  |         |
  |         first assignment to `num1`
  |         help: consider making this binding mutable: `mut num1`
3 |     num1 = 5;
  |     ^^^^^^^^ cannot assign twice to immutable variable

Ιδιοκτησία και Δανεισμός

Η ιδιοκτησία διασφαλίζει την ασφάλεια της μνήμης. Λειτουργικά, η ιδιοκτησία στο Rust μπορεί να συνοψιστεί ως εξής:

  Πώς να δημιουργήσετε σελίδα προορισμού προϊόντος πριν από την κυκλοφορία;

Κάθε αντικείμενο πρέπει να έχει έναν και μόνο ιδιοκτήτη. Εάν ο ιδιοκτήτης βγει εκτός πεδίου εφαρμογής, τότε το αντικείμενο απορρίπτεται.

Ας πάρουμε ένα απλό παράδειγμα. Εδώ, αρχικοποιούμε μια συμβολοσειρά str1 και στη συνέχεια μετακινούμε την τιμή της στο str2. Καθώς κάθε αντικείμενο μπορεί να έχει μόνο έναν ιδιοκτήτη, το αντικείμενο str1 απορρίπτεται μόλις η τιμή του μετακινηθεί στο str2.

fn main() {
    let str1 = String::from("Rust");
    let str2 = str1;
    println!("The value of str1 is: {}", str1);
}
error[E0382]: borrow of moved value: `str1`
 --> src/main.rs:4:42
  |
2 |     let str1 = String::from("Rust");
  |         ---- move occurs because `str1` has type `String`, which does not implement the `Copy` trait
3 |     let str2 = str1;
  |                ---- value moved here
4 |     println!("The value of str1 is: {}", str1);
  |                                          ^^^^ value borrowed here after move

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

Γρήγορη ανάπτυξη

Μέχρι στιγμής, έχουμε συζητήσει αρκετά χρήσιμα χαρακτηριστικά της γλώσσας προγραμματισμού Rust. Για να ελέγξετε μερικά:

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

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

Ανάπτυξη πολλαπλών πλατφορμών

Με το Rust, μπορείτε να επιλέξετε να αναπτυχθείτε σε μια πλατφόρμα της επιλογής σας. Το Rust υποστηρίζει τις πιο κοινές πλατφόρμες: Linux, MacOS και Windows.

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

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

  Πώς να δημιουργήσετε Emoji Mash-Ups χρησιμοποιώντας το Gboard

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

Εκτός από την επίσημη τεκμηρίωση, υπάρχει επίσης ένας ιστότοπος τεκμηρίωσης που δημιουργείται από χρήστες και ένα φόρουμ συζήτησης. Μπορείτε επίσης να ελέγξετε τις ομάδες Rust subreddit και LinkedIn για σχετικές συζητήσεις.

Πόροι εκμάθησης για να ξεκινήσετε με τη σκουριά

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

#1. Σκουριά Με Παράδειγμα

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

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

#2. θρόισμα

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

#3. Σκουριά πίστας άσκησης

Το Rust Track on Exercism έχει περισσότερες από 100 ασκήσεις που θα σας βοηθήσουν να μάθετε και να δοκιμάσετε την κατανόησή σας για το Rust. Το Exercism είναι μια δωρεάν πλατφόρμα όπου μπορείτε να λάβετε καθοδήγηση από έμπειρους προγραμματιστές εκτός από την κωδικοποίηση του τρόπου σας μέσα από τις ασκήσεις.

#4. Ultimate Rust Crash Course

Το μάθημα Ultimate Rust Crash που διδάσκεται από τον Nathan Stocks στο Udemy καλύπτει τα ακόλουθα:

  • Βασικές αρχές προγραμματισμού Rust
  • Σύστημα μονάδων σε Rust
  • Τύποι δεδομένων και ροή ελέγχου
  • Αναφορά και δανεισμός
  • Δομές, χαρακτηριστικά και συλλογές

#5. Ultimate Rust 2: Intermediate Concepts

Το Ultimate Rust 2 είναι ένα μάθημα παρακολούθησης του Ultimate Rust Crash Course και καλύπτει τα ακόλουθα θέματα:

  • Κλείσιμο
  • Iterators
  • Διαχείριση σφαλμάτων
  • Δοκιμή μονάδας και ολοκλήρωσης
  • Καταγραφή, multithreading και κανάλια

#6. Rust lang: Ο πλήρης οδηγός για αρχάριους 2023

Αυτό το μάθημα Udemy που διδάσκεται από τον Catalin Stefan είναι ένα ολοκληρωμένο μάθημα για τον προγραμματισμό Rust. Μερικά από τα θέματα που καλύπτονται περιλαμβάνουν:

  • Βασικά στοιχεία σκουριάς
  • Τύποι δεδομένων, δομές ελέγχου
  • Λειτουργίες, γνωρίσματα
  • Διαχείριση μνήμης
  • Συγχρονισμός

#7. Προγραμματισμός Rust: Γρήγορη, ασφαλής ανάπτυξη συστημάτων

Το Programming Rust by O’Reilly είναι ένα δημοφιλές βιβλίο προγραμματισμού Rust που θα σας διδάξει τα εξής:

  • Βασικοί τύποι δεδομένων
  • Η ιδιοκτησία και ο δανεισμός
  • Ασύγχρονος προγραμματισμός
  • Γρήγορες εφαρμογές πολλαπλών νημάτων
  • Κλείσιμο, επαναληπτικοί
  • Συλλογές

#8. The Rust Programming Language, 2η Έκδοση

Η Γλώσσα Προγραμματισμού Rust συντάχθηκε από διάσημους συνεργάτες της κοινότητας Rust. Αυτό το βιβλίο καλύπτει όλα όσα πρέπει να γνωρίζετε για το Rust, όπως:

  • Η ιδιοκτησία και ο δανεισμός
  • Γενόσημα, χαρακτηριστικά
  • Έξυπνοι δείκτες, πολλαπλών νημάτων
  • Δοκιμές και χειρισμός σφαλμάτων

#9. Ο πλήρης οδηγός αναφοράς προγραμματισμού σκουριάς

Ο πλήρης οδηγός αναφοράς προγραμματισμού σκουριάς από το Packt καλύπτει τα ακόλουθα:

  • Εφαρμογή δομών δεδομένων στο Rust
  • Γράψιμο επαναχρησιμοποιήσιμων και ελεγχόμενων εξαρτημάτων στο Rust
  • Σχεδιασμός πολυνηματικών εφαρμογών σχεδιασμός αλγορίθμων και
  • Εφαρμογές του Rust σε εφαρμογές WebAssembly, δικτύωσης και γραμμής εντολών

#10. Δημιουργικά έργα για προγραμματιστές Rust

Εάν είστε έμπειρος προγραμματιστής που μαθαίνει το Rust, τότε η δημιουργία μερικών έργων στον τομέα που σας ενδιαφέρει θα αρκεί για να κατανοήσετε καλά τη γλώσσα. Το Creative Projects for Rust Programmers από το Packt είναι ένα βιβλίο που διδάσκει το Rust εφαρμόζοντάς το σε έργα όπως:

  • Δημιουργία υπηρεσιών web Restful
  • 2D παιχνίδια με
  • Ανάπτυξη εφαρμογών Web με χρήση του WebAssembly
  • Εξομοιωτές γλώσσας μηχανής
  • κι αλλα!

συμπέρασμα

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

Ως επόμενο βήμα, μπορείτε να επιλέξετε έναν ή περισσότερους από τους πόρους εκμάθησης που αναφέρονται για να μάθετε τα βασικά του Rust. Προγραμματισμός Happy Rust!

Μπορείτε επίσης να εξερευνήσετε μερικούς καλύτερους παρόχους φιλοξενίας διακομιστή Rust.