Καταγραφή αρχιτεκτονικής απόφασης: γλώσσα προγραμματισμού Rust
Αριθμός απόφασης: AR-001
Τίτλος απόφασης: Υιοθέτηση της γλώσσας προγραμματισμού Rust
Ημερομηνία: 1 Δεκεμβρίου 2021
Κατάσταση: Αποδεκτή
Διατύπωση του προβλήματος
Καθώς συνεχίζουμε να αναπτύσσουμε εφαρμογές λογισμικού, έχουμε παρατηρήσει ότι είναι όλο και πιο δύσκολο να μετριάσουμε πιθανά τρωτά σημεία ασφαλείας και να προλάβουμε σφάλματα χρόνου εκτέλεσης. Με τις υπάρχουσες γλώσσες προγραμματισμού, όπως η C και η C++, συνεχίζουμε να αντιμετωπίζουμε προβλήματα όπως υπερχειλίσεις buffer, διαρροές μνήμης και απροσδιόριστη συμπεριφορά που οδηγεί σε κρασαρίσματα των εφαρμογών. Χρειαζόμαστε μια γλώσσα προγραμματισμού που παρέχει εγγυήσεις ασφάλειας μνήμης και είναι αρκετά αποδοτική ώστε να υποστηρίζει εφαρμογές κρίσιμες ως προς την απόδοση.
Σκέψεις
Αρκετές γλώσσες προγραμματισμού έχουν σχεδιαστεί για να αντιμετωπίζουν τα υπάρχοντα προβλήματα. Ανάμεσά τους, η γλώσσα προγραμματισμού Rust έχει κερδίσει σημαντική προσοχή από την κοινότητα προγραμματιστών λόγω των μοναδικών χαρακτηριστικών σχεδίασής της. Οι σκέψεις περιλαμβάνουν:
Ασφάλεια μνήμης και ασφάλεια
Απόδοση και αποδοτικότητα
Υποστήριξη κοινότητας και υιοθέτηση
Καμπύλη εκμάθησης
Εργαλεία και οικοσύστημα
Συμβατότητα με υπάρχοντα συστήματα λογισμικού.
Περιορισμοί
Η υιοθέτηση μιας νέας γλώσσας προγραμματισμού απαιτεί επανεκπαίδευση των προγραμματιστών, κάτι που απαιτεί χρόνο και πόρους. Η ενσωμάτωση της γλώσσας στην υπάρχουσα ροή ανάπτυξης μπορεί να αποτελέσει πρόκληση. Πρέπει να διασφαλίσουμε τη συμβατότητα με τα υπάρχοντα συστήματα και να αποφύγουμε αλλαγές που σπάνε τη συμβατότητα ώστε να διατηρηθεί η συνέχεια.
Υλοποίηση
Η ομάδα ανάπτυξής μας θα εκπαιδευτεί ώστε να μάθει και να εξοικειωθεί με τη γλώσσα προγραμματισμού Rust.
Θα δημιουργήσουμε ένα νέο έργο σε Rust σε δοκιμαστική βάση για να αξιολογήσουμε τη συμβατότητα και την καταλληλότητά του για τους αναπτυξιακούς μας σκοπούς.
Θα μεταφέρουμε σταδιακά υπάρχοντα συστήματα γραμμένα σε C και C++ σε Rust.
Θα συνεργαστούμε με την κοινότητα της Rust για να εξερευνήσουμε τα διαθέσιμα εργαλεία και βιβλιοθήκες που μπορούν να βελτιώσουν τη ροή ανάπτυξής μας.
Θα παρακολουθούμε τακτικά την απόδοση της Rust και θα τη συγκρίνουμε με την απόδοση των υπαρχουσών γλωσσών προγραμματισμού.
Θα υιοθετήσουμε μακροπρόθεσμη προσέγγιση που εξισορροπεί το κόστος εκπαίδευσης, ενσωμάτωσης και τα πιθανά οφέλη της χρήσης της Rust.
Αιτιολόγηση
Υιοθετήσαμε τη Rust λόγω των μοναδικών χαρακτηριστικών της που έχουν σχεδιαστεί για να παρέχουν εγγυήσεις ασφάλειας μνήμης και προστασίας, διατηρώντας παράλληλα την απόδοση και την αποδοτικότητα. Το στιβαρό σύστημα τύπων της Rust, ο borrow checker και οι έννοιες ασφάλειας μνήμης την καθιστούν πολύ κατάλληλη για την ανάπτυξη εφαρμογών κρίσιμων ως προς την απόδοση και την ασφάλεια. Επιπλέον, η Rust έχει σημαντική κοινότητα προγραμματιστών, που μας επιτρέπει πρόσβαση σε ευρύ φάσμα εργαλείων, βιβλιοθηκών και οικοσυστήματος που υποστηρίζουν τη ροή ανάπτυξής μας. Παρότι η Rust έχει καμπύλη εκμάθησης, πιστεύουμε ότι τα οφέλη της υιοθέτησής της υπερτερούν του κόστους και παρέχουν εξαιρετική ευκαιρία για συνεχή ανάπτυξη και καινοτομία.
Συνέπειες
Η υιοθέτηση της Rust θα απαιτήσει σημαντική επένδυση χρόνου και πόρων για την εκπαίδευση των προγραμματιστών και την ενσωμάτωση της γλώσσας στην υπάρχουσα ροή ανάπτυξης.
Η υιοθέτηση της Rust μπορεί να προκαλέσει κάποιον βαθμό προβλημάτων συμβατότητας με υπάρχοντα συστήματα, απαιτώντας αναδιάρθρωση και τροποποιήσεις.
Η υιοθέτηση της Rust μπορεί να αυξήσει τον αριθμό των προγραμματιστών που μπορούν να συμβάλουν στο έργο μας, προσελκύοντας προγραμματιστές Rust που θέλουν να εργαστούν σε συναρπαστικά έργα.
Η υιοθέτηση θα μπορούσε να οδηγήσει σε βελτιωμένη απόδοση, αποδοτικότητα και ασφάλεια σε σύγκριση με τις υπάρχουσες γλώσσες.
Τέλος, η υιοθέτηση της Rust συνοδεύεται από το πιθανό όφελος της μείωσης των τρωτών σημείων ασφαλείας στις εφαρμογές μας.