使用哈希表在类中存储方法有什么好处?

时间:2015-01-19 17:11:53

标签: compiler-construction interpreter bytecode compiler-optimization vm-implementation

我正在开发一种语言和虚拟机。语言是基于类的,动态类型的,它是静态范围的。

示例类如下所示:

class Foo
{
    var bar
    {
       function get { return bar; }
       function set(value) { bar = value; }
    }

    function f1() {...}
    function f2() {...}
}

在类中声明的实例变量受到保护,可以通过setter / getter函数访问。在类中声明的函数是public。

在运行时,实例变量可以存储在数组中,因此在此示例中,bar将存储在该数组的索引0处,编译器将负责在其getter函数中生成正确的LOAD 0指令。

其他功能怎么样?使用数组存储函数肯定会导致比使用哈希表更快的运行时访问,但我想知道可能是什么缺点。我的意思是如果我想支持在运行时向类添加函数的能力?最重要的是什么?

使用哈希表来存储方法而不是常规数组有什么好处?

1 个答案:

答案 0 :(得分:0)

如果动态输入语言,则需要能够按名称查找方法/成员函数。

您可以使用包含名称和过程链接的数组,您可以使用树,您可以使用链接列表,您可以使用散列,或者您可以使用其他一些数据结构,但您必须同时存储程序的名称和程序的链接,以便您可以按名称查找。

对于大数字条目,散列表往往更有效率,但对于少量条目,您有时会花费更多时间在每次查找上查找名称,而不是仅仅扫描数组。

所以,为了回答你的问题,哈希表的优势在于,当人们将大量方法(100,1000)放入一个类时,方法查找时间不会增加。

散列表的缺点是,对于具有少量方法的类(少于几十个,作为猜测),它们可能会使方法查找时间更长。