使用Node运行GHCJS程序的variables过多

我试图用node.js运行一个用GHCJS构build的程序。 但是,我得到以下错误:

SyntaxError: Too many variables declared (only 131071 allowed) at Module._compile (module.js:439:25) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:906:3 
  1. 是否有可能增加节点中允许的variables的数量?
  2. 有没有更好的工具来运行JS文件,这将允许更多的variables
  3. 有没有可以自动减lessvariables数量的优化工具?

请注意,这是机器生成的JS,所以我不希望手工通过并减lessvariables的数量。

任何想法都欢迎。

必须是一个非常大的计划:)

我遇到了非常旧的节点版本(32k)的variables限制,但还没有进入新的提升限制。 这个问题类似于Windows DLL的符号限制,导致dynamic链接的问题,并可能只是令人讨厌。

GHCJS将所有生成的代码作为顶层函数和variables发出,以提高效率和简单性(闭包由STG实现处理,所以嵌套函数在这里不是必需的)。

该限制仅适用于本地(function)范围。 不幸的是,node.js使用模块系统,并将所有代码隐式地加载到本地作用域中。

幸运的是,JavaScript为我们提供了一种方法来从本地作用域声明全局名称,只需要删除var关键字! 我想你应该可以运行脚本,如果你用var h$replace行首的所有var h$ h$

或者,您可以尝试使用SpiderMonkey JS shell或浏览器运行脚本,但这些给您一个更有限的环境(没有文件系统访问,无法启动或与其他进程交互)。

如果variables限制对您来说仍然是一个问题,请在https://github.com/ghcjs/ghcjs/issues打开一张票,这样我们可以尝试find一个更持久的解决scheme(可能通过调整链接时间转换步骤来分生成的代码分成多个模块)。

Interesting Posts