對於靜態類型語言,成員訪問非常簡單,只需在編譯時計算成員的偏移即可。但是,紅寶石或蟒蛇如何做呢?有可能更多的結構具有相同的成員名稱,你甚至不知道一個變量持有什麼樣的對象。他們是否使用某種字典在運行時查找成員?動態編程語言解釋器中的類/結構成員
4
A
回答
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如何做」這個問題很困難 - 每個實現都會在一種不同的方式(雖然會有很多相似之處,由語言設計強加)。
由於您似乎總體上對動態語言中的概念提出了疑問,希望您會發現上面的鏈接爲您提供了有關可能實現的一些有用信息。
相關問題
- 1. C語言:在函數中釋放結構成員的錯誤
- 2. 寫編程語言解釋
- 3. 瞭解解釋動態語言中的類型檢測
- 4. C動態成員結構
- 5. 解釋型語言 - 利用解釋器之後的編譯語言
- 6. 編譯解釋語言
- 7. 解釋語言是否適合解釋器的實現語言?
- 8. 解釋人類語言
- 9. 動態語言中的安全編程
- 10. 帶編程語言的三維結構
- 11. 口譯員和動態類型語言
- 12. 結構類成員
- 13. 在C語言中訂購優勢的結構成員
- 14. 在C語言中,比較一個結構的兩個成員
- 15. 更新結構 - d編程語言
- 16. C編程語言圖結構
- 17. Java中的連接語言解釋器
- 18. 用動態類型語言重構
- 19. 結構成員語法
- 20. '動態'搜索的編程語言?
- 21. 編程語言解析器的來源?
- 22. 音樂編程語言寫在純C,JavaScript解釋器和Ruby
- 23. 結構中的類訪問類成員
- 24. 以解釋型語言存儲變量的數據結構
- 25. 結構成員的快速註釋
- 26. C#解釋語言
- 27. 解釋Django語言
- 28. 動態類型語言中的類型
- 29. 功能語言動態編程
- 30. ETL是解釋還是編譯語言