1

私は最近、イテレーターとプールに関する2012 年の理論的根拠の部分を読みました。概観したことの 1 つは、サブプールに関する新しい機能です。未回答の質問の 1 つは、サブプールとプールのプールの違いは何かということです。

-- Minnesota: Land of 10,000 Lakes
type Minnesota(Size: Storage_Count) is new Root_Storage_Pool with private;
type Lake(Size: Storage_Count) is new Root_Storage_Pool with private
     with Storage_Pool => Minnasota;
-- ...
type Pooled is [...] with Storage_Pool => Lake;

私はサブプールを使用したことがないので、ひどく間違っている可能性があることを認めますが、プールは(まだ)はるかに少ないです。

4

1 に答える 1

0

Comp.Lang.Ada の Randy Brukardtから

Aspect Storage_Pool はアクセス タイプ ( 13.11(15)など) にのみ適用され、タイプ Lake はアクセス タイプではないため、これは違法です (同様に意味がありません)。

その実装内に他のプールを配置することで、1 つのプールを実装できます (たとえば、10000 個の湖の配列を含むミネソタ州とします:-)。ただし、各サブプールに属するアイテムを選択する方法が必要です。そして、あなたは車輪を再発明することになります.

ファイナライズの問題もあります。サブプール メカニズムにより、サブプールが早期に明示的に破棄された場合でも (Unchecked_Deallocation と同様に)、オブジェクトがサブプールよりも長く存続しないことが保証されます (オブジェクトへのポインターはサブプールよりも長く存続する可能性がありますが、オブジェクト自体はそうではありません)。言語サポートなしでこれを行う良い方法はありません (私たちが話したすべての手書きのサブプール実装は、そこから制御、保護、またはタスク オブジェクトを割り当てないように主張していましたが、これは明らかに制限です)。

断言しますが、これを正しく行うことは困難で論争の的でした。数回落としそうになりました。自分でやれば論争になることはありませんが (願わくば!)、それでも難しいでしょう。ARG はすでに汚れた作業を行っているので、それを使用するのが最善です。

                                            Randy.
于 2013-02-17T01:12:02.073 に答える