Η αρχιτεκτονική του group borrowing

Το Valen επιχειρεί να επιλύσει το 'ιερό δισκοπότηρο' της διαχείρισης μνήμης: την επίτευξη ασφάλειας επιπέδου Rust με την ευελιξία της διαχείρισης μνήμης που συναντάμε σε συστήματα με garbage collection ή reference counting. Η κεντρική ιδέα βασίζεται στο ότι ο compiler διατηρεί πληροφορίες για το 'πού' δείχνει κάθε αναφορά (path tracking).

Μηχανισμοί ασφάλειας και διαδρομές (paths)

Η ασφάλεια στο Valen δομείται πάνω σε πέντε πυλώνες:

  1. Single Ownership: Κάθε δεδομένο ανήκει σε έναν ιδιοκτήτη (stack frame, container, global).
  2. Path Tracking: Κάθε αναφορά αποθηκεύει τη διαδρομή του αντικειμένου στο οποίο δείχνει.
  3. Invalidation: Όταν ένα αντικείμενο καταστρέφεται, όλες οι αναφορές που δείχνουν στο path του καθίστανται άκυρες.
  4. Function Signatures: Οι συναρτήσεις δηλώνουν ρητά ποια paths τροποποιούν.
  5. Compile-time Enforcement: Ο compiler ελέγχει αν οι κλήσεις συναρτήσεων παραβιάζουν την εγκυρότητα των υπαρχουσών αναφορών.

Υπέρβαση του shared-xor-mutable

Σε αντίθεση με το μοντέλο της Rust, όπου η ταυτόχρονη ύπαρξη πολλαπλών mutable αναφορών απαγορεύεται, το Valen επιτρέπει την ύπαρξη πολλαπλών αναφορών ανάγνωσης-εγγραφής στο ίδιο αντικείμενο, εφόσον ο compiler μπορεί να αποδείξει ότι δεν θα προκύψει use-after-free. Αυτό καθιστά το Valen ιδιαίτερα ισχυρό σε σενάρια όπως το ScopeGuard pattern ή η διαχείριση σύνθετων γραφημάτων δεδομένων, όπου η αυστηρή ιεραρχία της Rust συχνά οδηγεί σε περιττή πολυπλοκότητα ή χρήση unsafe blocks.