Η αρχιτεκτονική του group borrowing
Το Valen επιχειρεί να επιλύσει το 'ιερό δισκοπότηρο' της διαχείρισης μνήμης: την επίτευξη ασφάλειας επιπέδου Rust με την ευελιξία της διαχείρισης μνήμης που συναντάμε σε συστήματα με garbage collection ή reference counting. Η κεντρική ιδέα βασίζεται στο ότι ο compiler διατηρεί πληροφορίες για το 'πού' δείχνει κάθε αναφορά (path tracking).
Μηχανισμοί ασφάλειας και διαδρομές (paths)
Η ασφάλεια στο Valen δομείται πάνω σε πέντε πυλώνες:
- Single Ownership: Κάθε δεδομένο ανήκει σε έναν ιδιοκτήτη (stack frame, container, global).
- Path Tracking: Κάθε αναφορά αποθηκεύει τη διαδρομή του αντικειμένου στο οποίο δείχνει.
- Invalidation: Όταν ένα αντικείμενο καταστρέφεται, όλες οι αναφορές που δείχνουν στο path του καθίστανται άκυρες.
- Function Signatures: Οι συναρτήσεις δηλώνουν ρητά ποια paths τροποποιούν.
- Compile-time Enforcement: Ο compiler ελέγχει αν οι κλήσεις συναρτήσεων παραβιάζουν την εγκυρότητα των υπαρχουσών αναφορών.
Υπέρβαση του shared-xor-mutable
Σε αντίθεση με το μοντέλο της Rust, όπου η ταυτόχρονη ύπαρξη πολλαπλών mutable αναφορών απαγορεύεται, το Valen επιτρέπει την ύπαρξη πολλαπλών αναφορών ανάγνωσης-εγγραφής στο ίδιο αντικείμενο, εφόσον ο compiler μπορεί να αποδείξει ότι δεν θα προκύψει use-after-free. Αυτό καθιστά το Valen ιδιαίτερα ισχυρό σε σενάρια όπως το ScopeGuard pattern ή η διαχείριση σύνθετων γραφημάτων δεδομένων, όπου η αυστηρή ιεραρχία της Rust συχνά οδηγεί σε περιττή πολυπλοκότητα ή χρήση unsafe blocks.