JavaScript 地图阴影
JavaScript Map shadowing
用 JavaScript 编写解析器,对于任何语言,显然都使用 Map 来存储名称到变量的映射。
大多数语言允许以某种方式或内部作用域中的另一个变量遮蔽外部作用域中的变量。实现这一点的理想数据结构是功能映射。如果没有,似乎有两种选择。
将 Map 视为功能图,创建外部 map 的副本,将内部变量添加到副本中,让它在内部范围结束时被垃圾回收。这很优雅,但每次都花费 O(N) 时间复制现有变量,因此如果在给定点有很多变量,可能会很慢。
采用完整的命令式风格,只需使用单个映射,保存旧绑定并在内部范围的末尾恢复它。这很快,但不够优雅且容易出错。
我还缺少更好的选择吗?是否就哪个选项最好达成共识?
使用 link 编辑的 Map
对象列表来表示范围 链。如果第一个没有找到标识符link,递归遍历其余直到全局范围
用 JavaScript 编写解析器,对于任何语言,显然都使用 Map 来存储名称到变量的映射。
大多数语言允许以某种方式或内部作用域中的另一个变量遮蔽外部作用域中的变量。实现这一点的理想数据结构是功能映射。如果没有,似乎有两种选择。
将 Map 视为功能图,创建外部 map 的副本,将内部变量添加到副本中,让它在内部范围结束时被垃圾回收。这很优雅,但每次都花费 O(N) 时间复制现有变量,因此如果在给定点有很多变量,可能会很慢。
采用完整的命令式风格,只需使用单个映射,保存旧绑定并在内部范围的末尾恢复它。这很快,但不够优雅且容易出错。
我还缺少更好的选择吗?是否就哪个选项最好达成共识?
使用 link 编辑的 Map
对象列表来表示范围 链。如果第一个没有找到标识符link,递归遍历其余直到全局范围