我正在开发一门语言和一台虚拟机。语言是基于类的,动态类型的,并且是静态作用域的。
示例类如下所示:
class Foo
{
var bar
{
function get { return bar; }
function set(value) { bar = value; }
}
function f1() {...}
function f2() {...}
}在类中声明的实例变量是受保护的,并且可以由setter/getter函数访问。在类中声明的函数是公有的。
在运行时,实例变量可以存储在数组中,因此在本例中,bar将存储在该数组的索引0处,编译器将负责在其getter函数中生成正确的LOAD 0指令。
其他的函数呢?使用数组存储函数肯定会比使用哈希表更快地进行运行时访问,但我想知道这样做的缺点是什么。我的意思是,如果我想要支持在运行时向类添加函数的功能,该怎么办?那么重写呢?
使用哈希表而不是常规数组来存储方法有什么优点?
发布于 2015-07-16 01:13:07
如果语言是动态类型的,那么您将需要能够按名称查找方法/成员函数。
可以使用包含过程名称和链接的数组,可以使用树,可以使用链表,可以使用散列,也可以使用其他数据结构,但必须同时存储过程的名称和过程的链接,以便按名称查找。
哈希表对于较大的条目往往更有效,但是对于较少的条目,您有时会在每次查找时花费更多的时间来散列名称,而不是仅仅扫描一个数组。
所以,回答你的问题,哈希表的优点是,当人们将大量的方法(100,1000)放入一个类中时,方法查找时间不会倾向于增加。
哈希表的缺点是,对于方法数量较少的类(估计少于几十个),它们可能会使方法查找时间更长。
https://stackoverflow.com/questions/28030065
复制相似问题