Φιλοσοφία και στόχοι του οδηγού

Ο οδηγός στυλ της Google για τη Rust δεν περιορίζεται στην αισθητική του κώδικα, αλλά αποτελεί ένα στρατηγικό εργαλείο για τη διατήρηση της ποιότητας σε τεράστιες βάσεις κώδικα. Οι κανόνες στοχεύουν στη συνέπεια, τη βελτίωση της αναγνωσιμότητας και, κυρίως, στη διευκόλυνση των μαζικών αλλαγών (Large-Scale Changes - LSCs) μέσω εργαλείων αυτοματοποίησης.

Αρχιτεκτονική και οργάνωση κώδικα

Στο οικοσύστημα του Chromium, η Google προωθεί μια προσέγγιση που διαφέρει από τα συμβατικά πρότυπα του Cargo:

  • Small Crates: Προτιμώνται μικρά, εστιασμένα crates που αντιστοιχούν σε μία κύρια αφαίρεση.
  • Flat File Layout: Απαγορεύεται η χρήση υποκαταλόγων εντός ενός crate. Αν η πολυπλοκότητα απαιτεί υποκαταλόγους, αυτό αποτελεί ένδειξη ότι το crate πρέπει να διασπαστεί.
  • Leaf Modules: Τα αρχεία πηγαίου κώδικα πρέπει να ονομάζονται βάσει του κύριου αντικειμένου που ορίζουν, ενώ τα μη-τελικά modules (non-leaf modules) δεν πρέπει να περιέχουν υλοποίηση API, παρά μόνο δηλώσεις και re-exports.

Διαχείριση εξαρτήσεων και API

Για τη διασφάλιση της σαφήνειας, ο οδηγός επιβάλλει αυστηρούς περιορισμούς στις εισαγωγές (imports):

  • Απαγόρευση glob imports: Αποφεύγονται για να είναι πάντα ξεκάθαρη η προέλευση κάθε τύπου, με μοναδική εξαίρεση τη διαλειτουργικότητα με namespaces της C++.
  • Locally-scoped traits: Τα traits πρέπει να εισάγονται εντός του σώματος της συνάρτησης, εκτός αν χρησιμοποιούνται καθολικά στο αρχείο.
  • Qualified calls: Οι κλήσεις συναρτήσεων πρέπει να συνοδεύονται από το όνομα του module, ενισχύοντας την αναγνωσιμότητα χωρίς την ανάγκη για cross-reference εργαλεία.

Στρατηγική για την ασφάλεια και την απόδοση

Ο οδηγός δίνει ιδιαίτερη έμφαση στην αποφυγή περιττών αντιγράφων (deep copies), προτιμώντας τα borrows, ενώ θέτει περιορισμούς στη χρήση Rc και Arc για την αποφυγή overhead. Παράλληλα, ενθαρρύνει τη χρήση του #[must_use] για την αποφυγή σφαλμάτων λογικής και την εφαρμογή του #[non_exhaustive] σε δημόσια structs και enums για τη διασφάλιση της μελλοντικής συμβατότητας των API.