我使用 jison 用 JavaScript 为一种小语言编写了一个解释器,这是 bison 的 JS 端口。该语言用于评估表达式和条件。现在评估与解析混合在一起。
我正在尝试优化它,瓶颈是词法分析器和解析器。所以我决定提前解析它并仅在运行时进行评估。
问题是,先生成 JS 代码并仅运行它,还是生成 AST 并在运行时对其进行迭代,哪一个更快或更干净?
最佳答案
一般来说*,生成最接近机器代码的任何内容总是更快。在你的情况下,生成 javascript 会更快。
生成的 javascript 代码将由底层 C/C++ 解释器直接执行(在某些情况下将 JIT 编译为机器代码)。相比之下,用 javascript 编写自己的 VM 来执行 AST 将在 VM 的附加层 - javascript 上运行。
*注意:在某些极端情况下,解释器有时可以像 native 代码一样快速执行。第四个例子是因为它的解释器非常简单 - 它只是一个函数指针表。
关于javascript - 生成 AST 并对其进行迭代还是生成代码,哪个更快、更干净?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576405/