【发布时间】:2011-08-24 18:55:10
【问题描述】:
我目前正在用 ANTLR+Java 编写一个 JavaScript 编译器。
我在 Stack Overflow 上阅读了有关如何继续执行的问题 - 答案始终是对动态语言进行静态编译(没有 JIT 信息)太难了 - 但为什么是这样吗?当然有明显的“类型解析”问题,在 JavaScript 中可能是 eval 函数的问题 - 但还有其他原因吗? (因为它们似乎不太难克服纯静态(无 JITS))
我不包括基于 JIT 的编译,因为我认为这对我来说太难实现了。
我在编写带有字节码执行的静态编译器方面有一些经验。
更新:
你所有的答案都对理解问题很有帮助。 澄清一下这是否意味着 JavaScript 比其他动态语言更难实现?
这是否也意味着我使用基于树的解释器比使用基于树的解释器更好。字节码(如果我们忘记了 JS 总是以原始源代码提供的属性 - 因此增加了额外的时间来生成和 IR 并随后执行它)? - 还是应该同样容易/难做?
(我是 SOF 新手;不知道这是否是更新问题的首选方式?)
【问题讨论】:
标签: javascript static-analysis dynamic-languages compiler-construction