Vtables在大多數OO實現中無處不在,但它們有替代方案嗎? vtables的wiki頁面有一個簡短的介紹,但不是真的有很多信息(和存根鏈接)。vtable的替代方案
你知道一些不使用vtables的語言實現嗎?
是否有免費的在線網頁討論替代方案?
Vtables在大多數OO實現中無處不在,但它們有替代方案嗎? vtables的wiki頁面有一個簡短的介紹,但不是真的有很多信息(和存根鏈接)。vtable的替代方案
你知道一些不使用vtables的語言實現嗎?
是否有免費的在線網頁討論替代方案?
是的,有很多選擇!
V表是唯一可能的時候可以靜態確定
通常,繼承是通過將一個基於字符串的表映射到其實現的函數名稱以及允許每個類查找其基類的指針來實現的。然後通過遍歷這個結構來實現方法調度,尋找實現該方法的接收者對象的類的最低類。爲了加速ip執行,通常會使用內聯緩存等技術,其中呼叫站點根據對象的類型存儲應該調用哪個方法的猜測,以避免花費時間遍歷整個結構。 Self編程語言使用了這個想法,然後它被合併到HotSpot JVM中以處理接口(標準繼承仍然使用vtables)。
另一種選擇是使用跟蹤,其中編譯器發出代碼來猜測對象的類型,然後硬編碼將方法調用到跟蹤中。 Mozilla Firefox在其JavaScript解釋器中使用它,因爲沒有辦法爲每個對象構建vtables。
我剛剛完成了一門編譯器課程的教學,我的一個講座是關於各種編程語言中對象的實現以及相關的權衡。如果您願意,可以查看幻燈片here。
希望這會有所幫助!