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

Struct 动态编程语言解释器中的类/结构成员,struct,interpreter,Struct,Interpreter,对于静态类型语言,成员访问很容易,只需在编译时计算成员的偏移量。然而,ruby或python是如何做到这一点的?可能有更多具有相同成员名称的结构,而您甚至不确定变量包含什么类型的对象。他们是否使用某种字典在运行时查找成员?如果您从头开始实现一种动态类型的语言,您可能会从这开始—使用类似于基于哈希表的字典的东西,这是一个非常好的解决方案 一些针对大小而不是性能优化的动态语言运行时(例如,高度大小优化的Javascript解释器)专门使用这种方法,并且工作良好 然而,大多数现代的基于JIT的动态语言

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

如果您从头开始实现一种动态类型的语言,您可能会从这开始—使用类似于基于哈希表的字典的东西,这是一个非常好的解决方案

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

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

在这里,我描述了V8地图是如何工作的,以及它们如何使财产访问非常高效。它包含一个链接,指向更详细的描述,还有一段视频,作者是V8引擎的首席工程师之一Lars Bak,如果你对这个东西的工作原理感兴趣,这很好

对于Ruby(与Javascript一样),有许多不同的实现(JRuby、MRI、Rubinius等),因此回答“Ruby是如何做到的”这个问题很困难——每个实现都会以不同的方式实现(尽管语言设计会带来许多相似之处)

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