Η αρχιτεκτονική προσέγγιση της Evergreen

Η Evergreen επιχειρεί να γεφυρώσει το χάσμα μεταξύ της απόδοσης των γλωσσών συστημάτων και της μαθηματικής επαλήθευσης (formal verification). Σε αντίθεση με παραδοσιακές προσεγγίσεις, η γλώσσα επιβάλλει τη χρήση συμβολαίων (contracts) που ορίζουν τι πρέπει να ισχύει για κάθε δομή δεδομένων ή συνάρτηση. Ο compiler λειτουργεί ως μηχανή επαλήθευσης, διασφαλίζοντας ότι οι περιορισμοί αυτοί ικανοποιούνται πριν από την εκτέλεση.

Διαχείριση αναλλοίωτων και αποδείξεις

Ένα από τα πιο ενδιαφέροντα χαρακτηριστικά της Evergreen είναι η δυνατότητα ορισμού αναλλοίωτων (invariants) που συνοδεύουν τον κώδικα. Μέσω της χρήσης fact και ensures δηλώσεων, ο προγραμματιστής μπορεί να περιγράψει την αναμενόμενη συμπεριφορά του προγράμματος. Το κρίσιμο στοιχείο είναι ότι αυτές οι αποδείξεις και τα λήμματα επαγωγής (induction lemmas) αφαιρούνται πλήρως μετά τον έλεγχο, διασφαλίζοντας ότι ο παραγόμενος κώδικας παραμένει εξαιρετικά αποδοτικός.

Μνήμη και ασφάλεια

Η γλώσσα υιοθετεί ένα μοντέλο διαχείρισης μνήμης που βασίζεται σε ρητά layouts και ownership, παρόμοιο με τη φιλοσοφία της Rust, αλλά με επιπλέον έμφαση στην παρακολούθηση της εγκυρότητας των αναφορών (borrowed references). Η Evergreen παρακολουθεί πότε ένα memory plane είναι ενεργό, αποτρέποντας σφάλματα πρόσβασης στη μνήμη πριν αυτά συμβούν, καθιστώντας την μια ισχυρή εναλλακτική για κρίσιμα συστήματα όπου η ασφάλεια είναι αδιαπραγμάτευτη.