De programmeertaal Valen heeft een nieuw systeem voor geheugenveiligheid geïntroduceerd. Het systeem, dat de makers flexibel borrow checking noemen, controleert tijdens het compileren of verwijzingen naar geheugen geldig blijven. Daardoor zijn voor de beschreven controles geen extra kosten tijdens het uitvoeren van een programma nodig.
Een belangrijk uitgangspunt is dat de compiler bijhoudt naar welk object een verwijzing wijst. Als dat object wordt vervangen of ongeldig wordt gemaakt, markeert de compiler de verwijzing als ongeldig. Een programma dat daarna alsnog via die verwijzing toegang probeert te krijgen tot het object, wordt geweigerd voordat het kan worden uitgevoerd.
Minder beperkingen bij gedeeld gebruik
Bestaande borrow checkers, waaronder die van Rust, hanteren doorgaans de regel dat geheugen óf gedeeld gelezen óf gewijzigd mag worden. Valen richt zich in plaats daarvan op het voorkomen van gebruik van vrijgemaakt geheugen. Daardoor kunnen meerdere verwijzingen naar hetzelfde object bestaan en kan via verschillende verwijzingen een wijziging worden uitgevoerd.
In een voorbeeld wijzen twee lokale variabelen naar dezelfde lijst. De ene verwijzing voegt het getal 42 toe en de andere 73. Valen accepteert dit patroon, omdat de compiler kan vaststellen dat beide verwijzingen nog naar dezelfde geldige lijst wijzen.
Het systeem kan ook overweg met verwijzingen naar een object en naar een onderdeel daarvan. Andere genoemde toepassingen zijn meerdere functieparameters die naar hetzelfde object verwijzen, structuren met gedeelde toegang tot een subsysteem en zogenoemde rollbackstructuren. Die kunnen bij het verlaten van een bereik nog een wijziging uitvoeren.
De aanpak is gebaseerd op group borrowing, een ontwerp waarbij de locatie van een verwijzing centraal staat in de controle. Het concept heeft inmiddels navolging gekregen in verschillende programmeertalen. Carbon van Google is volledig op group borrowing overgestapt. Ook Ante, Plecra, Zeta en Fang verwerken onderdelen ervan in hun ontwerpen.
Valen combineert group borrowing met technieken uit Vale, een andere programmeertaal. Het project werkt daarnaast aan interoperabiliteit met Rust, zodat Valen-code Rust-code kan aanroepen. De makers zeggen met het systeem uiteindelijk een combinatie te willen bieden van de controle van Rust en de flexibiliteit van reference counting of garbage collection.
De beschreven voorbeelden gebruiken enkele vereenvoudigingen voor de leesbaarheid. Automatische dereferentie, directe indexering van structuren en het afleiden van typen uit groepen stonden op de planning voor november 2026. De onderliggende borrow-checkingregels zouden volgens de makers ook zonder die syntactische functies werken.


