我正在开发一种语言和虚拟机。语言是基于类的、动态类型的并且是静态范围的。
示例类如下所示:
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 指令。
其他功能呢?使用数组来存储函数肯定会比使用哈希表实现更快的运行时访问,但我想知道可能有什么缺点。我的意思是,如果我想支持在运行时向类添加函数的能力怎么办?覆盖怎么样?
使用哈希表代替常规数组来存储方法有哪些优点?
最佳答案
如果语言是动态类型的,那么您将需要能够按名称查找方法/成员函数。
您可以使用包含名称和过程链接的数组,可以使用树,可以使用链表,可以使用散列,或者可以使用其他一些数据结构,但必须存储过程的名称和过程的链接,以便您可以按名称查找。
哈希表对于大量条目往往更有效,但对于少量条目,您有时会在每次查找时花费更多时间对名称进行散列,而不是扫描数组。
因此,为了回答您的问题,哈希表的优点是,当人们将大量方法(100 个、1,000 个)放入一个类中时,方法查找时间不会增加。
哈希表的缺点是,对于方法数量较少(猜测不到几十个)的类,它们可能会延长方法查找时间。
关于compiler-construction - 使用哈希表在类中存储方法有什么优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28030065/