动态编程语言解释器中的类/结构成员

时间:2016-02-29 18:31:36

标签: struct interpreter

对于静态类型语言,成员访问很容易,您只需在编译时计算成员的偏移量。但是ruby或python是如何做到的呢?可能有更多具有相同成员名称的结构,您甚至不确定变量包含哪种对象。他们是否使用某种字典在运行时查找成员?

1 个答案:

答案 0 :(得分:4)

如果你是从头开始实现动态类型语言,那可能就是你要开始的地方 - 就像基于哈希表的字典一样,这是一个非常好的解决方案。

一些针对大小而非性能优化的动态语言运行时(例如Jerryscript,一个高度大小优化的Javascript解释器)专门使用这种方法,并且工作正常。

然而,大多数现代的基于JIT的动态语言运行时,例如V8 Javascript引擎(用于Chrome和Node.js)或Safari中使用的JSC Javascript引擎,如果它们不能使用这种字典作为后备做得更好。

Here's an answer to another question我描述了V8映射如何工作以及它们如何使属性访问非常有效。它包含一个更详细描述的链接,以及Lars Bak的视频,Lars Bak是V8的首席工程师之一,如果您对这些内容的工作方式感兴趣,那就很好。

使用Ruby(与Javascript一样),有许多不同的实现(JRuby,MRI,Rubinius等),所以回答“Ruby如何做到”的问题很难 - 每个实现都会在不同的方式(虽然语言设计会有许多相似之处)。

由于您似乎一般都在询问动态语言中的概念,希望您会发现上面的链接为您提供了有关可能实现的一些有用信息。