Javascript 变量太多,无法使用节点运行GHCJS程序
我正在尝试运行一个使用node.js使用GHCJS构建的程序。但是,我得到以下错误:Javascript 变量太多,无法使用节点运行GHCJS程序,javascript,node.js,haskell,ghc,ghcjs,Javascript,Node.js,Haskell,Ghc,Ghcjs,我正在尝试运行一个使用node.js使用GHCJS构建的程序。但是,我得到以下错误: 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 F
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
欢迎任何想法。一定是一个相当大的计划:) 我在非常旧的节点版本(32k)上遇到了变量限制,但还没有遇到新的提高的限制。这个问题与Windows DLL符号限制类似,它会导致动态链接出现问题,并且可能同样令人讨厌 GHCJS将所有生成的代码作为顶级函数和变量发出,以提高效率和简化性(闭包由STG实现处理,因此这里不需要嵌套函数) 该限制仅适用于本地(函数)范围。不幸的是,node.js使用模块系统,并将所有代码隐式加载到本地范围 幸运的是,JavaScript为我们提供了一种仍然从本地范围声明全局名称的方法,您只需删除
var
关键字!我认为如果您将行开头的所有var h$
替换为h$
,您应该能够运行脚本
或者,您可以尝试使用SpiderMonkey JS shell或在浏览器中运行脚本,但这会给您一个更有限的环境(没有文件系统访问,无法启动或与其他进程交互)
如果变量限制仍然是您的问题,请在打开一张罚单,以便我们可以尝试找到更持久的解决方案(可能通过调整链接时间转换步骤将生成的代码划分为多个模块)。这实际上是javascript引擎v8的一个限制,它无法处理超过131071个变量定义,所以你不能增加它。2和3:这取决于,你到底在这里做什么?当您在中简单地
require()?因为变量太多了,唯一值得优化的可能就是将自己的代码重写为更合理的代码。@Mike'Pomax'Kamermans好吧,它用GHCJS标记,这是一个haskell->JS编译器。所以,这是生成的代码,他没有太多的控制权。只是为了更新,我能够使用闭包编译器将大小降低到4MB,所以这应该会有所帮助。