pointer例えばクロージャががある言語ではポインタや参照がクロージャによってキャプチャされ、本来のライフタイムを超えて使用される(escapeする)可能性がある。自分がいちばん馴染みのあるSwiftでも同じ。Cycloneはクロージャこそ持っていないが存在型を持っている。env;};存在型は「ある型について〇〇」のように型の一部分を量化することで抽象的に扱うための仕組み。存在型にpackしてしまえば、openして抽象的なまま扱うことはできても元の型が何であったかを知る方法はない。いう型であることからはαがポインタ型であることはわからなくなってしまう。pointerが起こる可能性がある。これを防ぐためにCycloneでは2つの手法を導入する。呼ばれるその時点で生きているリージョンの集合を考え、関数を呼び出す際にはその関数のEffectに含まれるリージョンがすべてCapabilityに含まれることを確認する。オペレータを導入する。含まれるリージョンによって決まる。regions_of(α));}αがポインタであればregions_of(α)はそのポインタが指すリージョンになるし、ポインタ型でなければ空集合になる。Bound「あるリージョンがある別のリージョンより長生き」のような制約をかけて、存在型にpackする際に型チェックを行えるようにすることでopen時には安全に操作できることが保証されているようにできる。};適切な日本語がわからないけど、TaPLの全称型・存在型に対しては有界量化と呼ばれてたので「有界リージョン」みたいな感じだろうか。実際「長生き」関係はそのままサブタイプ関係になりそうなので同じ考え方をしてもよさそう。pointerのデリファレンス、メモリリークをコンパイル時に防ぐ仕組みとしてリージョンを導入したリージョンを明示的に書くのは大変なので、省略するための仕組みがある。