【发布时间】:2016-07-08 17:28:59
【问题描述】:
我有一些使用 js_of_ocaml 从 Ocaml 编译为 Javascript 的代码。现在,当将该代码移动到 Web Worker 线程中时,我开始收到StackOverflows。
但是,当我在主线程上运行代码时,或者如果我在 worker 版本中启用 chrome://flags/#enable-javascript-harmony,代码运行良好!
知道会发生什么吗? enable-harmony 标志到底在做什么?
我认为它可以启用尾调用优化,但对我来说似乎很奇怪,它尚未启用。此外,单独的尾调用并不能解释为什么代码在主线程中运行时不会溢出。
有关实际代码的示例,请参见下面的链接。在第一个链接中,代码在主线程中运行,在第二个链接中,代码的主要部分委托给了一个worker:
当我们到达optimize_0plus_sound 引理的第一个归纳时,worker 版本中会发生堆栈溢出; Coq 在主线程中运行的版本完全没有问题。很奇怪。
谢谢!
【问题讨论】:
标签: javascript google-chrome ecmascript-6 web-worker ecmascript-harmony