2013-02-12 76 views
1

我最近讀了迭代器和池中的the 2012 rationale部分。其中一個概括的是關於子池的新能力,一個沒有答案的問題是子池和池池之間有什麼區別 - 我的意思是,似乎可以像這樣實現:(pg.25):新的Ada子池功能和池池有什麼不同?

-- 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; 

雖然我承認我可能是非常錯誤的,因爲我沒有使用子池,更少的池(還)。

回答

0

來自Randy Brukardt的Comp.Lang.Ada

看點Storage_Pool僅適用於接入類型(13.11(15)和 等),然後鍵入湖不是一個訪問類型,因此這是非法的(和 是沒有意義的爲好)。

您可以通過將其他池放置在其實現中(例如明尼蘇達州,其中包括10000個湖泊陣列 :-))來實現一個池。但是你必須有一種方法來選擇哪個項目屬於 每個子項。你會重新發明輪子。

還有最終確定的問題。子池機制確保 對象不超出其子池(指向對象 的指針可能比子池長,但不是對象本身),即使當子池被明確銷燬時(就像 Unchecked_Deallocation一樣)。如果沒有 語言支持(我們在 中提到的每個手寫子池實現都堅持認爲沒有受控,受保護或任務對象 從中分配,這顯然是有限的),沒有好方法。

讓我向你保證,獲得這個權利是困難和有爭議的。這是 幾乎下降了幾次。自己動手不會是 有爭議(我希望!),但它仍然很難。由於ARG有 已經完成了骯髒的工作,所以最好使用它。

          Randy.