虚拟机通过索引或哈希访问全局变量
Virtual machine access globals by index or hash
我正在创建自己的 class 语言和虚拟机。
它是静态范围的,我正在尝试评估使用数组与散列 table 来表示全局 table 中的槽的优缺点。
我知道使用数组比使用哈希 table 快得多,我想知道在灵活性方面,哈希 table 实现的优势是什么。
例如代码var a = 1;
可以在运行时表示为:
PUSH 1;
SET_GLOBAL 0;
其中 SET_GLOBAL
指令中的 0 可以表示全局数组内的索引或标识符 "a" 的常量池内的索引(在这种情况下将使用散列 table)。我的问题是关于 pros/cons 在这种特殊情况下的 array/hash 用法...
首先让我们看看 symbol/global table.
的要求是什么
Symbol/Global Table 要求:- // 摘自 this link
快速查找。
结构灵活
高效使用space.
处理语言的特征(例如,作用域、隐式声明)
你的假设是错误的我知道使用数组比使用散列要快得多table。数组适用于非常小且不需要动态行为实现的语言。
如今,几乎所有的高级语言编译器都使用 HashTable.
来实现它们的符号 table
Array会落后于HashTable的主要点是
没有添加新标识符的灵活性
在某种程度上查找速度比散列法慢
在全局变量的情况下,链接将通过引用较旧的条目来适当注意。
我正在创建自己的 class 语言和虚拟机。 它是静态范围的,我正在尝试评估使用数组与散列 table 来表示全局 table 中的槽的优缺点。 我知道使用数组比使用哈希 table 快得多,我想知道在灵活性方面,哈希 table 实现的优势是什么。
例如代码var a = 1;
可以在运行时表示为:
PUSH 1;
SET_GLOBAL 0;
其中 SET_GLOBAL
指令中的 0 可以表示全局数组内的索引或标识符 "a" 的常量池内的索引(在这种情况下将使用散列 table)。我的问题是关于 pros/cons 在这种特殊情况下的 array/hash 用法...
首先让我们看看 symbol/global table.
的要求是什么Symbol/Global Table 要求:- // 摘自 this link
快速查找。
结构灵活
高效使用space.
处理语言的特征(例如,作用域、隐式声明)
你的假设是错误的我知道使用数组比使用散列要快得多table。数组适用于非常小且不需要动态行为实现的语言。
如今,几乎所有的高级语言编译器都使用 HashTable.
来实现它们的符号 tableArray会落后于HashTable的主要点是
没有添加新标识符的灵活性
在某种程度上查找速度比散列法慢
在全局变量的情况下,链接将通过引用较旧的条目来适当注意。