Framework for escape set

Richard Andrew Cattermole (Rikki) richard at cattermole.co.nz
Wed Sep 18 16:35:47 UTC 2024


After this month's monthly meeting, me and Walter had a chance to 
talk briefly about how to go forward on my escape analysis 
proposal. What I was able to conclude, is that Walter was unable 
to understand the subtle changes between that proposal and 
DIP1000.

So what this proposal is meant to do, is to demonstrate just how 
different it is and quite importantly it introduces modifiers on 
a given input-output relationship. This establishes how memory 
moves within a function.

A key difference in this analysis framework is that DIP1000 
considers the attributes at the start of analysis, this one does 
not. It can grow and shrink as analysis occurs and errors happen 
as late as possible allowing for more code to work AND with a 
second forward pass enables a traced set of errors rather than 
just when the error occurs.

Inferred everything of course. But inferration is a side effect 
of validation.

Latest: 
https://gist.github.com/rikkimax/18563106f610a2daa069c635079a955c

Current: 
https://gist.github.com/rikkimax/18563106f610a2daa069c635079a955c/13f84866c82d66dacd9a32039e96cb4aa0243a1f

There are two examples where the relationship modifiers defaults 
are not what you want, the defaults are setup to eliminate the 
``return scope`` ``scope return`` ordering issues. Of note is 
that ``return`` can be mapped to ``@escape(return)`` and 
``scope`` to ``@escape()``.

```d
// default strength would be = due to return not being ref, but 
we want it &
int** intRefOutPtr(@escape(return&) ref int* input) => &input;

struct Owner {
	private {
		int* ptr;
	}

	int* borrow() @escape(return&) {
		return this.ptr; // default strength for return would be . but 
we want &
	}
}
```

The benefit of this proposal as the framework for escape 
analysis, is owner escape analysis (borrow checker) can always be 
on. DIP1000 has a subset of this that is specialized to stack 
memory. GC memory would not be affected unjustly. This allows us 
to have safe reference counting and therefore they would be 
unblocked.

Another benefit is type state analysis (nullability) would be 
able to be performed at the same time. It uses the same state 
storage as escape analysis and hooks the same or similar things 
so it will be fairly cheap. This too opens up a new feature, an 
ownership transfer system like isolated ala Midori.


More information about the dip.ideas mailing list