2016-02-29 28 views
4

對於靜態類型語言,成員訪問非常簡單,只需在編譯時計算成員的偏移即可。但是,紅寶石或蟒蛇如何做呢?有可能更多的結構具有相同的成員名稱,你甚至不知道一個變量持有什麼樣的對象。他們是否使用某種字典在運行時查找成員?動態編程語言解釋器中的類/結構成員

回答

4

如果您是從零開始實施動態類型化語言,那麼您可能會從哪裏開始 - 像基於哈希表的字典這樣的東西,這是一個完美的解決方案。

針對大小而非性能進行了優化的一些動態語言運行時(例如Jerryscript,高度優化的Javascript解釋器)完全使用這種方法,並且工作正常。

但是,大多數現代基於JIT的動態語言運行時(如Chrome和Node.js中使用的V8 Javascript引擎)或Safari中使用的JSC Javascript引擎僅使用這種字典作爲後備,不要做更好的事情。

Here's an answer to another question在那裏我描述了V8地圖是如何工作的,以及他們如何使屬性訪問非常有效。它包含一個更詳細描述的鏈接,還有一個由V8的首席工程師之一Lars Bak製作的視頻,如果你對這些東西的工作原理感興趣的話,這很好。

對於Ruby(與Javascript一樣),有許多不同的實現(JRuby,MRI,Rubinius等),因此回答「Ruby如何做」這個問題很困難 - 每個實現都會在一種不同的方式(雖然會有很多相似之處,由語言設計強加)。

由於您似乎總體上對動態語言中的概念提出了疑問,希望您會發現上面的鏈接爲您提供了有關可能實現的一些有用信息。