虚拟机通过索引或哈希访问全局变量

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

  1. 快速查找。

  2. 结构灵活

  3. 高效使用space.

  4. 处理语言的特征(例如,作用域、隐式声明)

你的假设是错误的我知道使用数组比使用散列要快得多table。数组适用于非常小且不需要动态行为实现的语言。

如今,几乎所有的高级语言编译器都使用 HashTable.

来实现它们的符号 table

Array会落后于HashTable的主要点是

  1. 没有添加新标识符的灵活性

  2. 在某种程度上查找速度比散列法慢

  3. 在全局变量的情况下,链接将通过引用较旧的条目来适当注意。