Value semantics with reference counting, no borrow checker

Oska guarantees memory safety through value semantics and automatic reference counting:

The research behind this design (findings 1 and 8) requires memory safety, but not any particular mechanism for it. We want signatures to describe authority (capabilities), not lifetimes. We also want to avoid the borrow-checker compile-fix loop for agents. That second point is a judgment call; it has not been measured.

Considered options

Consequences

Graph-shaped data has to use IDs or arena-style collections instead of pointers.

Mutation goes through mutating methods (fn push(var self, x: T)), which can only be called on var bindings. No parameter other than self can be mutated, so all other data has to flow out through return values.